Как использовать mochijson для кодирования структуры данных в эрланге? - PullRequest
6 голосов
/ 14 июля 2009

Я использую mochiweb и не знаю, как использовать его кодер json для работы со сложной структурой данных. В чем разница между mochijson и mochijson2? Есть ли хороший пример? Я всегда получаю следующие ошибки:

46> T6={struct,[{hello,"asdf"},{from,"1"},{to,{a,"aa"}}]}.
{struct,[{hello,"asdf"},{from,"1"},{to,{a,"aa"}}]}
47> mochijson2:encode(T6).                                
** exception exit: {json_encode,{bad_term,{a,"aa"}}}
     in function  mochijson2:json_encode/2
     in call from mochijson2:'-json_encode_proplist/2-fun-0-'/3
     in call from lists:foldl/3
     in call from mochijson2:json_encode_proplist/2


39> T3={struct,[{hello,"asdf"},{[{from,"1"},{to,"2"}]}]}.
{struct,[{hello,"asdf"},{[{from,"1"},{to,"2"}]}]}
40> mochijson:encode(T3).                                 
** exception error: no function clause matching mochijson:'-json_encode_proplist/2-fun-0-'({[{from,"1"},{to,"2"}]},
                                                                                           [44,"\"asdf\"",58,"\"hello\"",123],
                                                                                           {encoder,unicode,null})
     in function  lists:foldl/3
     in call from mochijson:json_encode_proplist/2

Ответы [ 2 ]

11 голосов
/ 14 июля 2009

mochijson2 работает со строками как двоичными файлами, списками как массивами и декодирует только UTF-8. mochijson декодирует и кодирует кодовые точки Unicode.

Чтобы создать глубокую структуру, я сделал следующее:

2> L = {struct, [{key2, [192]}]}. 
{struct,[{key2,"?"}]}
3> 
3> L2 = {struct, [{key, L}]}.   
{struct,[{key,{struct,[{key2,"?"}]}}]}
4> 
4> mochijson:encode(L2).
[123,"\"key\"",58,
 [123,"\"key2\"",58,[34,"\\u00c0",34],125],
 125]

Так что, если вы рекурсивно создадите свою структуру данных с использованием списков, все будет в порядке. Я не уверен, почему глубокие структуры не поддерживаются, но, похоже, они не поддерживаются, по крайней мере, не так, как вы пытаетесь их создать. Может быть, кто-то знает более умный способ сделать это.

Вы также можете проверить эту тему: примеров mochijson2!

или

Видеоруководство по разработке веб-приложений на Erlang

4 голосов
/ 29 сентября 2010
T6={struct, [{hello,"asdf"},{from,"1"},{to, {a,"aa"}} ]}.

вместо этого должно быть:

T6={struct, [{hello,"asdf"},{from,"1"},{to, {struct, [{a,"aa"}]}} ]}.

Вложенные структуры должны иметь тот же стиль "struct", что и объект верхнего уровня.

...