【发布时间】:2017-05-11 10:55:46
【问题描述】:
我是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) key :address not found in: %{"address" => "123", "public" => "abc"} ...
所以我想我真正的问题是我该如何转
%{"address" => "123", "public" => "abc"}
进入
%{:address => "123", :public => "abc"}
这样我就可以成功使用这个了:
body.address
对吗?
【问题讨论】:
-
将字符串从互联网转换为原子是个坏主意。原子不是垃圾收集的。因此,请使用您在下面发现的
body["address"]方法。但是,要回答您的问题Enum.map(params, fn {key, value} -> {String.to_atom(key), value} end) |> Enum.into(%{})。但不要这样做:)