Question

Je coder des données à l'aide mochijson2. Mais je trouve qu'il se comporte étrange sur les chaînes sous forme de listes.

Exemple:

  

mochijson2. Encode ( "foo")

     

[91, "102", 44 "111", 44 "111", 93]

Où "102", "111", "111" sont $ f, $ o, o $ codés comme des chaînes 44 sont des virgules et 91 et 93 sont brakets carrés.

Bien sûr, si je sortie quelque part ce que je vais chaîne « [102111111] », qui est évidemment pas que ce que je quoi.

Si j'essaye

  

mochijson2. Encode (<< "foo" >>)

     

[34, << "toto" >>, 34]

Je nouveau je reçois une liste de deux doublequotes et une partie binaire dans lequel peut être traduit en binaire avec list_to_binary / 1

Voici la question - pourquoi est-il si incohérent. Je comprends qu'il ya un problème distingushing liste des Erlang qui doivent être codées sous forme de tableau JSON et la chaîne de Erlang qui doit être codé sous forme de chaîne JSON, mais au moins il peut binaire sortie quand je passer binaire?

Et la deuxième question: On dirait que tout mochijson sorties bien (car il utilise tuple spécial pour désigner les tableaux {tableau, ...})

  

mochijson: encode (<< "foo" >>)
.   "\" Foo \ ""

Quelle est la différence entre mochijson2 et mochijson? Performance? manipulation Unicode? Rien d'autre?

Merci

Était-ce utile?

La solution

Je suppose que la décision mochijson est qu'il traite un binaire comme une chaîne, et il traite une liste d'entiers comme une liste d'entiers. (Un?) Heureusement des chaînes en Erlang sont en fait une liste d'entiers.

En conséquence votre « foo », ou en d'autres termes, votre [102111111] est traduit en texte représentant « [102111111] ». Dans le second cas votre << "foo" string >> devient "foo"

En ce qui concerne la deuxième question, mochijson semble toujours revenir une chaîne, alors que mochijson2 retourne un iodata Type. Iodata est essentiellement une liste récursive des chaînes, binaires et iodatas (en iolists de fait). Si vous ne l'intention d'envoyer le résultat « à travers le fil », il est plus efficace pour eux juste nid dans une liste que les convertir en une chaîne plat.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top