mochijson2 или mochijson

Я кодирую некоторые данные, используя mochijson2. Но я обнаружил, что он ведет себя странно в строках в виде списков.

Пример:

mochijson2: закодировать ("Foo").

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

Где "102", "111", "111" - это $f, $o, $o, закодированные как строки 44, - это запятые, а 91 и 93 - квадратные скобки.

Конечно, если я выведу это куда-нибудь, я получу строку "[102,111,111]", которая явно не та, что я что.

Если я попробую

mochijson2: закодировать (<< "Foo" >>).

[34,<< "Foo" >>,34]

Итак, я снова получаю список из двух двойных кавычек и двоичной части, которые можно перевести в двоичную форму с помощью list_to_binary/1

Вот вопрос - почему это так противоречиво. Я понимаю, что существует проблема с удалением списка erlang, который должен быть закодирован как массив json, и строки erlang, которая должна быть закодирована как строка json, но, по крайней мере, может ли он выводить двоичный файл, когда я передаю его в двоичном виде?

И второй вопрос: похоже, что mochijson выводит все красиво (потому что он использует специальный кортеж для обозначения массивов {array,...})

mochijson: закодировать (<< "Foo" >>).
"\" Foo\""

В чем разница между mochijson2 и mochijson? Спектакль? Обработка Юникода? Что-нибудь еще?

Спасибо

1 ответ

Решение

Я думаю, что решение в mochijson заключается в том, что он рассматривает двоичный файл как строку, а список целых чисел рассматривает как список целых чисел. (Не?) К счастью, строки в Erlang на самом деле представляют собой список целых чисел.

В результате ваш "foo" или, другими словами, ваш [102,111,111] переводится в текст, представляющий "[102,111,111]". Во втором случае ваша строка << "foo" >> становится "foo"

Что касается второго вопроса, кажется, что mochijson всегда возвращает строку, тогда как mochijson2 возвращает тип iodata. Iodata - это в основном рекурсивный список строк, двоичных файлов и йод (на самом деле iolists). Если вы намереваетесь только отправить результат "по проводам", эффективнее просто поместить их в список, чем преобразовать их в плоскую строку.

Другие вопросы по тегам