2017-02-04 12 views
2

Я пытаюсь взять карту Erlang какКодирование карт Erlang как JSON со строками для разбора по Javascript?

#{"breakfast" => "leftovers"} 

и закодировать в карте JSON.

Я попытался преобразование списка с мигом, например

([email protected])27> binary_to_list(jiffy:encode(["alpha", "beta"])). 
"[[97,108,112,104,97],[98,101,116,97]]" 

, но я не уверен, как преобразовать, что в объект JSON.

Когда я пытаюсь преобразовать карту, я получаю «invalid_member_key»

([email protected])28> jiffy:encode(#{"breakfast" => "egg sandwhich"}). 
** exception throw: {error,{invalid_object_member_key,"breakfast"}} 
    in function jiffy:encode/2 (src/jiffy.erl, line 97) 

Я попытался довольно форматировщик для списка, и я получаю новые строки

([email protected])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]" 

Почему это не работает? a json_object is

-type json_object() :: {[{json_string(),json_value()}]} 
         | #{json_string() => json_value()}. 

, так что я ожидаю преобразования карты на работу. Я попытался найти и найти примеры при чтении JSON, но не рабочий пример преобразования Erlang в читаемый JSON.

ответ

2

Проблема в том, что в Erlang строка "hello" представляет собой список целых чисел. Библиотеки, которые кодируют карты Erlang в JSON, интерпретируют строки как списки JSON, поэтому вы получаете список целых чисел в выходе.

Для того, чтобы получить JSON строки, нужно использовать Erlang двоичные файлы как значения в картах:

Food = #{<<"breakfast">> => <<"leftovers">>}, 
jiffy:encode(Food). 
%%= <<"{ \"breakfast\" : \"leftovers\" }">> 

jiffy согласуется с тем, что будет также декодировать JSON строки как Erlang двоичные файлы, которые необходимо принять во счет при использовании jiffy:decode/1.