Pergunta

Eu estou usando mochiweb e eu não sei como usar seu codificador JSON para lidar com estrutura de dados complexa. Qual é a diferença entre mochijson e mochijson2? Existe algum bom exemplo? Eu sempre obter os seguintes erros:

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
Foi útil?

Solução

mochijson2 trabalha com cordas como binários, listas como matrizes, e só decodifica UTF-8. decodificações mochijson e codifica unicode pontos de código.

Para criar uma estrutura profunda eu fiz o seguinte:

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]

Então, se você recursivamente criar sua estrutura de dados usando listas, então você vai ficar bem. Eu não sei por estruturas profundas não são suportados, mas eles não parecem ser, pelo menos não da maneira que está tentando criá-los. Talvez alguém conhece uma maneira mais inteligente fazer isso.

Você também pode verificar esta discussão: mochijson2 exemplos

ou

video Tutorial para começar a desenvolver aplicativos da web em Erlang

Outras dicas

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

deve preferivelmente ser:

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

As estruturas aninhadas precisa ter o mesmo estilo "struct" como o objeto de nível superior.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top