Pregunta

Estoy codificar algunos datos utilizando mochijson2. Pero he encontrado que se comporta extraño en cadenas como listas.

Ejemplo:

  

mochijson2:. Encode ( "foo")

     

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

Cuando "102", "111", "111" están $ f, $ O, $ o codificados como cadenas 44 son las comas y 91 y 93 son corchetes cuadrados.

Por supuesto, si la salida que esto en algún lugar Voy a cadena "[102111111]", que obviamente no es eso lo que lo.

Si intento

  

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

     

[34, << "foo" >>, 34]

Así que de nuevo me sale una lista de dos comillas dobles y parte binaria dentro del cual se puede traducir a binario con list_to_binary / 1

Aquí está la pregunta - ¿por qué es tan inconsistente. Entiendo que hay un problema de la lista de Erlang distingushing que debe ser codificada como matriz JSON y la cadena de Erlang que debe ser codificada como cadena JSON, pero al menos puedo binaria de salida cuando se lo paso binaria?

Y la segunda pregunta: Parece que mochijson da salida a todo lo bueno (causa que utiliza tupla especial para designar las matrices {array, ...})

  

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

¿Cuál es la diferencia entre mochijson2 y mochijson? ¿Actuación? manejo de Unicode? Algo más?

Gracias

¿Fue útil?

Solución

Mi conjetura es que la decisión de mochijson es que trata a un binario como una cadena, y se trata a una lista de números enteros como una lista de números enteros. (Un?) Afortunadamente cadenas en Erlang son de hecho una lista de números enteros.

Como resultado de su "foo" o, en otras palabras, su [102111111] se traduce en texto que representa "[102111111]". En el segundo caso su << "foo" >> cadena se convierte en "foo"

En cuanto a la segunda pregunta, mochijson parece volver siempre una cadena, mientras que mochijson2 devuelve un iodata tipo. Iodata es básicamente una lista recursiva de cuerdas, binarios y iodatas (en iolists de operaciones). Si sólo se van a enviar el resultado "a través del alambre", es más eficiente que simplemente nido en una lista que ellos convertir en una cadena plana.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top