长生不老药无法解码 JSON
elixir poison not able to decode JSON
我正在尝试下面的代码
data = Poison.decode!(payload)
|> ProperCase.to_snake_case
Logger.info("data is #{data}")
有效负载来自 Messging Queue
{
"name":"Joe",
"id": "13",
"version": 0
}
我收到一个错误
[error] Could not process PerfectFlight: %Protocol.UndefinedError{description: "", protocol: String.Chars, value: %{"id" => "13", "name" => "Joe", "version" => 0}}
但是,如果我将输入 json 更改为
"{
\"name\":\"Joe\",
\"id\": \"13\",
\"version\": 0
}"
Poison.decode()
工作得很好。现在的问题是,由于多种原因,我不想更改输入 JSON
。我错过了什么?
编辑:代码不是在解码时失败,而是在下一行 Logger.info("data is #{data}")
。由于 decode
函数的输出不是 String
我应该使用 IO.inspect 如下。接受亚当斯对解码功能的信心的回答。
data = Poison.decode!(payload)
|> ProperCase.to_snake_case
IO.inspect(data)
毒没问题:
iex(1)> Poison.decode!(~S'{"name":"Joe", "id": "13", "version": 0}')
%{"id" => "13", "name" => "Joe", "version" => 0}
你的例子也适用于我:
iex(1)> payload = ~S'{"name":"Joe", "id": "13", "version": 0}'
"{\"name\":\"Joe\", \"id\": \"13\", \"version\": 0}"
iex(2)> Poison.decode!(payload) |> ProperCase.to_snake_case
%{"id" => "13", "name" => "Joe", "version" => 0}
您收到的错误可能是因为某处正在尝试将映射转换为字符串:
iex(1)> IO.puts %{"id" => "13", "name" => "Joe", "version" => 0}
** (Protocol.UndefinedError) protocol String.Chars not implemented for %{"id" => "13", "name" => "Joe", "version" => 0}
您在尝试调试问题时似乎遇到了错误。您可以使用 IO.inspect
而不是 IO.puts
进行调试,看看是否可以获得更有帮助的错误消息。
我正在尝试下面的代码
data = Poison.decode!(payload)
|> ProperCase.to_snake_case
Logger.info("data is #{data}")
有效负载来自 Messging Queue
{
"name":"Joe",
"id": "13",
"version": 0
}
我收到一个错误
[error] Could not process PerfectFlight: %Protocol.UndefinedError{description: "", protocol: String.Chars, value: %{"id" => "13", "name" => "Joe", "version" => 0}}
但是,如果我将输入 json 更改为
"{
\"name\":\"Joe\",
\"id\": \"13\",
\"version\": 0
}"
Poison.decode()
工作得很好。现在的问题是,由于多种原因,我不想更改输入 JSON
。我错过了什么?
编辑:代码不是在解码时失败,而是在下一行 Logger.info("data is #{data}")
。由于 decode
函数的输出不是 String
我应该使用 IO.inspect 如下。接受亚当斯对解码功能的信心的回答。
data = Poison.decode!(payload)
|> ProperCase.to_snake_case
IO.inspect(data)
毒没问题:
iex(1)> Poison.decode!(~S'{"name":"Joe", "id": "13", "version": 0}')
%{"id" => "13", "name" => "Joe", "version" => 0}
你的例子也适用于我:
iex(1)> payload = ~S'{"name":"Joe", "id": "13", "version": 0}'
"{\"name\":\"Joe\", \"id\": \"13\", \"version\": 0}"
iex(2)> Poison.decode!(payload) |> ProperCase.to_snake_case
%{"id" => "13", "name" => "Joe", "version" => 0}
您收到的错误可能是因为某处正在尝试将映射转换为字符串:
iex(1)> IO.puts %{"id" => "13", "name" => "Joe", "version" => 0}
** (Protocol.UndefinedError) protocol String.Chars not implemented for %{"id" => "13", "name" => "Joe", "version" => 0}
您在尝试调试问题时似乎遇到了错误。您可以使用 IO.inspect
而不是 IO.puts
进行调试,看看是否可以获得更有帮助的错误消息。