Разбор JSON в Эрланге
У меня есть часть строки JSON, которую я хочу проанализировать в Erlang. Это выглядит так:
({ id1 : ["str1", "str2", "str3"], id2 : ["str4", "str5"]})
Я посмотрел на mochijson2 и пару других парсеров JSON, но я действительно не мог понять, как это сделать. Любая помощь очень ценится!
Ответы
Ответ 1
Я когда-то использовал 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, по крайней мере, насколько это парсер.
Ответ 2
вы можете работать с JSON на валидаторе JSONLint: http://www.jsonlint.com/
Ответ 3
Вы посмотрели http://www.json.org/?
или загрузите "json4erlang" отсюда: json-and-json-rpc-for-erlang
Ответ 4
Ваш вход не совсем JSON - ключи должны быть указаны, например:
{ "id1" : ["str1", "str2", "str3"], "id2" : ["str4", "str5"]}
Хорошая библиотека Erlang для управления JSON jsx
Ответ 5
Ваши JSON-ключи недействительны в соответствии с https://www.ietf.org/rfc/rfc4627.txt. Как только вы его исправите, для Erlang много библиотек JSON, моим фаворитом является JSX (https://github.com/talentdeficit/jsx/):
MyJSON = { "id1" : ["str1", "str2", "str3"], "id2" : ["str4", "str5"]},
jsx:decode(MyJSON, [return_maps]).
И он вернет структуру данных карты Erlang, которая может быть использована для ваших нужд http://learnyousomeerlang.com/maps