Pergunta

Estou codificando alguns dados usando mochijson2. Mas achei que isso se comporta estranho nas cordas como listas.

Exemplo:

Mochijson2: Encode ("Foo").

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

Onde "102", "111", "111" são $ f, $ O, $ O codificados como strings 44 são vírgulas e 91 e 93 são freios quadrados.

Obviamente, se eu produzir isso em algum lugar, vou obter string [102,111,111], o que obviamente não é o que eu.

Se eu tentar

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

34, << "foo" >>, 34

Então, novamente, recebo uma lista de dois duplos e parte binária na qual pode ser traduzida para binária com list_to_binary/1

Aqui está a pergunta: por que é tão inconsistente. Entendo que há um problema na lista de Erlang que deve ser codificada como JSON Array e Erlang String, que devem ser codificados como String JSON, mas pelo menos ele pode gerar binário quando eu o passar binário?

E a segunda pergunta: parece que Mochijson gera tudo de bom (porque ele usa a tupla especial para designar matrizes {Array, ...})

Mochijson: Encode (<< "foo" >>).
"" Foo ""

Qual é a diferença entre Mochijson2 e Mochijson? Atuação? Manuseio de Unicode? Algo mais?

Obrigado

Foi útil?

Solução

Meu palpite é que a decisão em Mochijson é que ela trata um binário como uma corda e trata uma lista de números inteiros como uma lista de números inteiros. Felizmente, as cordas em Erlang são de fato uma lista de números inteiros.

Como resultado, seu "foo", ou em outras palavras, seu [102,111,111] é traduzido para o texto representando [102,111,111]. No segundo caso, sua sequência << "foo" >> se torna "foo"

Em relação à segunda pergunta, Mochijson parece sempre devolver uma corda, enquanto Mochijson2 retorna um iodata modelo. O iodata é basicamente uma lista recursiva de cordas, binários e iodatas (na verdade iolistas). Se você pretende enviar apenas o resultado "através do fio", é mais eficiente apenas aninhá -los em uma lista do que convertê -los em uma corda plana.

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