2009-07-01 3 views
14

У меня есть часть строки JSON, которую я хочу разобрать в Erlang. Это выглядит следующим образом:Разбор JSON в Erlang

({ id1 : ["str1", "str2", "str3"], id2 : ["str4", "str5"]}) 

Я смотрел на mochijson2, и несколько других парсеров JSON, но я действительно не мог понять, как это сделать. Любая помощь очень ценится!

+9

Это неправда JSON. Ключи необходимо указывать, и вокруг него не должно быть скобок. – cdmckay

ответ

14

Я когда-то использовал erlang-json-eep-parser, и попробовал его на ваших данных.

7> json_eep:json_to_term("({ id1 : [\"str1\", \"str2\", \"str3\"], id2 : [\"str4\", \"str5\"]})"). 
** exception error: no match of right hand side value 
        {error,{1,json_lex2,{illegal,"("}},1} 
    in function json_eep:json_to_term/1 

Правильно, ему не нравятся круглые скобки.

8> json_eep:json_to_term("{ id1 : [\"str1\", \"str2\", \"str3\"], id2 : [\"str4\", \"str5\"]}"). 
** exception error: no match of right hand side value 
        {error,{1,json_lex2,{illegal,"i"}},1} 
    in function json_eep:json_to_term/1 

И это не нравится некотируемые ключи:

18> json_eep:json_to_term("{ \"id1\" : [\"str1\", \"str2\", \"str3\"], \"id2\" : [\"str4\", \"str5\"]}"). 
{[{<<"id1">>,[<<"str1">>,<<"str2">>,<<"str3">>]}, 
    {<<"id2">>,[<<"str4">>,<<"str5">>]}]} 

Это выглядит лучше.

Похоже, что ваши данные почти JSON, по крайней мере, насколько этот синтаксический анализатор.

0

Вы посмотрели http://www.json.org/?

или скачать «json4erlang» здесь: json-and-json-rpc-for-erlang

+0

Извините, я вижу, что erlang-json-parser - «Сервис временно недоступен» – Blauohr

+0

Да, я видел реализацию RFC4627, но когда я передаю вышеприведенную строку в качестве входа функции decode(), я получаю ошибку «badarg». .. – thomas55

0

Ваш вклад не совсем JSON - ключи должны быть заключены в кавычки, например:

{ "id1" : ["str1", "str2", "str3"], "id2" : ["str4", "str5"]} 

Хорошая библиотека Erlang для манипулирование JSON jsx

0

Ваши JSON-ключи недействительны в соответствии с https://www.ietf.org/rfc/rfc4627.txt. После того, как вы это исправить, есть множество JSON библиотек для Erlang, мой любимый JSX (https://github.com/talentdeficit/jsx/):

MyJSON = { "id1" : ["str1", "str2", "str3"], "id2" : ["str4", "str5"]}, 
jsx:decode(MyJSON, [return_maps]). 

И это возвращает карту структуру данных Erlang, которые можно манипулировать для ваших потребностей http://learnyousomeerlang.com/maps