1

这是一个简短的查询

在 Erlang 我使用解析 json

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

它返回

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

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

任何帮助表示赞赏。

4

3 回答 3

3

我发现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">>
于 2015-05-13T13:06:23.113 回答
1

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

{Attrs} = jiffy:decode(<<"{\"foo\": \"bar\"}">>),
FooValue = proplists:get_value(<<"foo">>, Attrs).
于 2015-05-12T09:45:10.187 回答
0

您可以尝试ej模块:

ej 模块可以更轻松地处理以 jiffy、mochijson2 或 ejson 返回的格式表示 JSON 的 Erlang 术语。您可以使用 ej:get/2 遍历对象并返回特定值,使用 ej:set/3 更新对象内的值,或使用 ej:delete/2 从对象中删除值。

于 2015-05-12T09:56:29.443 回答