elixir Poison数据类型解析Json数据

时间:2017-05-11 02:18:54

标签: json elixir

我是elixir的新手,很抱歉,我确信这很简单。

我可以找到关于此模式的数据类型的任何内容:

%{"quoted_string" => "string_w_quotes"}

那叫什么?

这是我遇到的问题。我正在使用HTTPoison和Poison。我调用Get请求并成功获得JSON响应,然后将整个响应传递给Poison。然后我模仿匹配给我的药水。我试图达到可以说body.address但我收到错误的地步。

以下是相关代码:

# after call
...
body
|> Poison.decode!
|> case do
  {:ok, %HTTPoison.Response{body: body}} ->
    IO.puts "response received"
    body.address
...

然后打印出来:

  

...收到回复   **(KeyError)键:找不到地址:%{“address”=> “123”,“public”=> “abc”} ...

所以我想我真正的问题是如何转向

  

%{“address”=> “123”,“public”=> “ABC”}

进入

  

%{:address => “123”,:public => “ABC”}

这样我就可以成功地使用它:

body.address

是吗?

2 个答案:

答案 0 :(得分:2)

它是带有二进制密钥的地图。

body.address是访问地图中原子键的简称。但是,如果密钥不存在,则不起作用。最好使用body[:address],如果地图没有密钥,则返回nil。

对于二进制密钥,您可以使用body["address"]来访问结构。或者,您可以使用Map.get(body, "address")

答案 1 :(得分:0)

修改后的代码说:

    |> Poison.decode!(keys: :atoms!)

那告诉Poison我想把钥匙当作原子。