elixir毒药数据类型解析Json数据
我是长生不老药的新手,很抱歉,我相信这很简单 我可以找到关于遵循以下模式的数据类型的任何信息:elixir毒药数据类型解析Json数据,json,elixir,Json,Elixir,我是长生不老药的新手,很抱歉,我相信这很简单 我可以找到关于遵循以下模式的数据类型的任何信息: %{“带引号的字符串”=>“带引号的字符串”} 那叫什么 这是我的问题。我用的是高压毒药和毒药。我调用一个Get请求并成功地获得一个JSON响应,然后将整个响应传递给毒药。然后我会根据药水给我的配型。我试图达到我可以说body.address的程度,但是我得到了一个错误 以下是相关代码: # after call ... body |> Poison.decode! |> case do
%{“带引号的字符串”=>“带引号的字符串”}
那叫什么
这是我的问题。我用的是高压毒药和毒药。我调用一个Get请求并成功地获得一个JSON响应,然后将整个响应传递给毒药。然后我会根据药水给我的配型。我试图达到我可以说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”}
所以我想我真正的问题是我该如何转身
%{“地址”=>“123”,“公共”=>“abc”}
进入
%{:address=>“123”,:public=>“abc”}
这样我就可以成功地使用它:
body.address
是这样吗?修改了代码:
|> Poison.decode!(keys: :atoms!)
这告诉毒药我希望钥匙是原子。修改了代码,这样说:
|> Poison.decode!(keys: :atoms!)
这告诉毒药我想要钥匙作为原子。这是一张带有二进制钥匙的地图
body.address
是访问映射中原子键的缩写。但是,如果钥匙不存在,它将不起作用。最好使用body[:address]
,如果地图没有键,它将返回nil
对于二进制键,可以使用
body[“address”]
访问结构。或者,您可以使用Map.get(body,“address”)
这是一个带有二进制键的映射
body.address
是访问映射中原子键的缩写。但是,如果钥匙不存在,它将不起作用。最好使用body[:address]
,如果地图没有键,它将返回nil
对于二进制键,可以使用
body[“address”]
访问结构。或者,您可以使用Map.get(body,“address”)
我将在这里留下我的答案,因为我解释了模式以及失败的原因。我不建议使用
符号访问映射,除非您希望它在密钥不存在时引发异常。我将在这里留下我的答案,因为我解释了模式以及失败的原因。我不建议使用
符号访问地图,除非您希望它在密钥不存在时引发异常。感谢提供此信息,它也帮助我解决了相关问题!我能够删除(keys::atoms!)
并使用body[“address”]
来调用它。感谢这些信息,它也帮助我解决了一个相关问题!我能够删除(keys::atoms!)
并使用body[“address”]
调用它。将字符串从internet转换为atoms是个坏主意。原子不是垃圾收集的。因此,使用您在下面发现的body[“address”]
方法。但是,要回答您的问题,Enum.map(params,fn{key,value}->{String.to_atom(key,value}end)|>Enum.into(%{})
。但是不要这样做:)把互联网上的字符串转换成原子是个坏主意。原子不是垃圾收集的。因此,使用您在下面发现的body[“address”]
方法。但是,要回答您的问题,Enum.map(params,fn{key,value}->{String.to_atom(key,value}end)|>Enum.into(%{})
。但不要这样做:)