Domanda

Sono codifica alcuni dati utilizzando mochijson2. Ma ho scoperto che si comporta strano sulle stringhe come liste.

Esempio:

  

mochijson2:. Encode ( "foo")

     

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

Dove "102", "111", "111" sono $ f, $ o, $ o codificati come stringhe 44 sono virgole e 91 e 93 sono parentesi quadre.

Naturalmente se l'uscita Ho questo da qualche parte avrò stringa "[102.111.111]", che non è ovviamente che quello che quello.

Se provo

  

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

     

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

Così ho di nuovo ho un elenco di due doublequotes e parte binaria all'interno dei quali può essere tradotto in binario con list_to_binary / 1

Questa è la domanda - perché è così incoerente. Capisco che c'è un problema distingushing elenco erlang che dovrebbe essere codificato come matrice JSON e la stringa erlang che dovrebbe essere codificato come stringa JSON, ma almeno posso esso binaria di uscita quando lo passo binario?

E la seconda domanda: Sembra mochijson Uscite tutto bello (causa usa tuple speciale per designare gli array di array {...})

  

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

Qual è la differenza tra mochijson2 e mochijson? Prestazione? Unicode gestione? C'è altro?

Grazie

È stato utile?

Soluzione

La mia ipotesi è che la decisione in mochijson è che si tratta di un binario come una stringa, e si tratta di un elenco di numeri interi come una lista di numeri interi. (Un?) Fortunatamente stringhe in Erlang sono infatti una lista di interi.

Di conseguenza il vostro "foo", o in altre parole, il vostro [102.111.111] è tradotto in testo che rappresenta "[102.111.111]". Nel secondo caso il vostro << "pippo" >> stringa diventa "pippo"

Per quanto riguarda la seconda domanda, mochijson sembra tornare sempre una stringa, mentre mochijson2 restituisce un iodata tipo. Iodata è fondamentalmente un elenco ricorsivo di stringhe, file binari e iodatas (in iolists fatto). Se si intende solo per inviare il risultato "attraverso il filo", è più efficiente proprio nido in una lista che li converte in una stringa piatta.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top