我是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
是吗?
答案 0 :(得分:2)
它是带有二进制密钥的地图。
body.address
是访问地图中原子键的简称。但是,如果密钥不存在,则不起作用。最好使用body[:address]
,如果地图没有密钥,则返回nil。
对于二进制密钥,您可以使用body["address"]
来访问结构。或者,您可以使用Map.get(body, "address")
。
答案 1 :(得分:0)
修改后的代码说:
|> Poison.decode!(keys: :atoms!)
那告诉Poison我想把钥匙当作原子。