如何在erlang中解码json后读取键值

How to read a key value after decoding json in erlang

这是一个简短的查询

在 Erlang 中,我使用

解析了 json
Ccode = jiffy:decode(<<"{\"foo\": \"bar\"}">>).

它returns

{[{<<"foo">>,<<"bar">>}]}

现在的目标是获取 'foo' 的值,它应该 return 'bar'

感谢任何帮助。

您可以使用模式匹配提取 JSON 对象的属性列表,然后通过结果列表中的键查找值:

{Attrs} = jiffy:decode(<<"{\"foo\": \"bar\"}">>),
FooValue = proplists:get_value(<<"foo">>, Attrs).

你可以试试ej模块:

The ej module makes it easier to work with Erlang terms representing JSON in the format returned by jiffy, mochijson2, or ejson. You can use ej:get/2 to walk an object and return a particular value, ej:set/3 to update a value within an object, or ej:delete/2 to remove a value from an object.

我发现 jsx 易于使用:

Eshell V6.2  (abort with ^G)
1> Data = jsx:decode(<<"{\"foo\": \"bar\"}">>).
[{<<"foo">>,<<"bar">>}]
2> proplists:get_value(<<"foo">>, Data).
<<"bar">>

您甚至可以将其解析为 Maps

3> Map = jsx:decode(<<"{\"foo\": \"bar\"}">>, [return_maps]).
#{<<"foo">> => <<"bar">>}
4> maps:get(<<"foo">>, Map).
<<"bar">>