Вопрос

Я кодирую некоторые данные с помощью 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, ...})

мочиджсон:кодировать(<<"foo">>).
"\"фу\""

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

Спасибо

Это было полезно?

Решение

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top