2015-05-12 6 views
0

Вот короткий запрос,Как прочитать значение ключа после декодирования JSON в Эрл

В Erlang я разобранного JSON с использованием

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

возвращает

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

Теперь цель, чтобы получить значение «foo» и оно должно возвращать «бар»

любая помощь приветствуется.

ответ

1

Вы можете извлечь список атрибутов объекта JSON с помощью сопоставления с образцом, а затем найти значение по ключу в полученном списке:

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

Rubber Ктулху ..... это прекрасно работает на моей раковине, я готов использовать Jiffy в модуле ejabberd, у вас есть вам какие-либо идеи о том, что, если мне нужно включить что-то в файле .erl , потому что я получаю неизвестную функцию. –

0

Вы можете попробовать ej модуль:

Модуль ej упрощает работу с членами Erlang, представляющими JSON в формате, возвращаемом jiffy, mochijson2 или ejson. Вы можете использовать ej: get/2 для перемещения объекта и возврата определенного значения, ej: set/3 для обновления значения внутри объекта или ej: delete/2 для удаления значения из объекта.

2

Я нахожу jsx более простым в использовании, чем jiffy.

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">> 
+0

Просто чтобы добавить, вы можете сделать jiffy decode на карты, используя опцию 'return_maps'. –