2009-07-14 17 views
6

J'utilise mochiweb et je ne sais pas comment utiliser son codeur json pour gérer une structure de données complexe. Quelles sont les différences entre mochijson et mochijson2? Y a-t-il un bon exemple? Je reçois toujours les erreurs suivantes:Comment utiliser mochijson pour coder la structure de données dans erlang?

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 

Répondre

11

mochijson2 fonctionne avec des chaînes sous forme de binaires, listes sous forme de tableaux, et ne décode que UTF-8. mochijson décode et code les points de code Unicode.

Pour créer une structure profonde, je l'ai fait ce qui suit:

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] 

Donc, si vous créez récursive votre structure de données à l'aide des listes alors vous serez très bien. Je ne sais pas pourquoi les structures profondes ne sont pas supportées, mais elles ne semblent pas l'être, du moins pas de la façon dont vous essayez de les créer. Peut-être que quelqu'un d'autre connaît une façon plus intelligente de le faire.

Vous pouvez également consulter ce fil: mochijson2 examples!

ou

http://beebole.com/en/blog/erlang/tutorial-web-application-erlang/

4

T6 = {struct, [{bonjour, "asdf"}, {de "1"}, { à, {a, "aa"}}]}.
devrait plutôt être
T6 = {struct, [{hello, "asdf"}, {de, "1"}, {à, {struct, [{a, "aa"}]}}]}.

Les structures imbriquées doivent avoir le même style "struct" que l'objet de niveau supérieur.