Кодирование карт Erlang в виде JSON со строками для анализа с помощью Javascript?
Я пытаюсь взять карту Эрланга, как
#{"breakfast" => "leftovers"}
и кодировать как карту JSON.
Я попытался преобразовать список с помощью Jiffy, например
(tunnel@127.0.0.1)27> binary_to_list(jiffy:encode(["alpha", "beta"] )).
"[[97,108,112,104,97],[98,101,116,97]]"
но я не уверен, как преобразовать это в объект JSON.
Когда я пытаюсь преобразовать карту, я получаюinvalid_member_key
"
(tunnel@127.0.0.1)28> jiffy:encode(#{"breakfast" => "egg sandwhich"}).
** exception throw: {error,{invalid_object_member_key,"breakfast"}}
in function jiffy:encode/2 (src/jiffy.erl, line 97)
Я попробовал симпатичный форматер для списка, и я получаю новые строки
(tunnel@127.0.0.1)31> binary_to_list(jiffy:encode(["alpha", "beta"], [pretty] )).
"[\n [\n 97,\n 108,\n 112,\n 104,\n 97\n ],\n [\n 98,\n 101,\n 116,\n 97\n ]\n]"
Почему это не работает? объект json_object
-type json_object() :: {[{json_string(),json_value()}]}
| #{json_string() => json_value()}.
поэтому я ожидаю преобразования карты в работу. Я попытался найти и найти примеры чтения JSON, но не рабочий пример преобразования Erlang в читаемый JSON.
1 ответ
Проблема в том, что в Erlang строка "hello"
это просто список целых чисел. Библиотеки, которые кодируют карты Erlang в JSON, интерпретируют строки как списки JSON, поэтому вы получаете список целых чисел в выходных данных.
Чтобы получить строки JSON, вы должны использовать двоичные файлы Erlang в качестве значений на ваших картах:
Food = #{<<"breakfast">> => <<"leftovers">>},
jiffy:encode(Food).
%%= <<"{ \"breakfast\" : \"leftovers\" }">>
jiffy
является последовательным, поэтому он также будет декодировать строки JSON в виде двоичных файлов Erlang, что необходимо учитывать при использовании jiffy:decode/1
,