Dev ›
JSON в 1С:8.x ›
#17
21.01.17 21:14
(16) Это не ошибки, это даже на особенности не тянет. Даже не заглядывая в ваш файл могу пояснить такую разницу.
1) Если текст на входе содержал пробелы, символы табуляции, переводы строк ВНЕ СТРОКОВЫХ ДАННЫХ, то все эти символы при парсинге отбрасываются, как не содержащие данных. Например, json файл был отформатирован как в вашем примере "файл меньшего размера", а при сериализации получится 1 строка, так как все лишние переводы строк и отступы будут убраны.
2) Если текст на входе содержал комбинацию из двух байт \b, то на выходе это будет один байт - символ пробел.
3) При сериализации юникод символы не заменяются на комбинации \uXXXX. Соответственно 6 байт во входном файле заменяются на 1 или 2 байта в выходном файле.
Вы конечно можете с этим поспорить, но при использовании связки 1С->JSON нет необходимости при сериализации заменять юникод символы на комбинации \uXXXX, так как 1С по-умолчанию создает файлы в кодировке utf, и эту кодировку прекрасно читает любой веб-сервер. Если же вам все-таки требуется конвертация юникод символов в комбинацию \uXXXX, то уже особенности вашего конкретного случая, и эти особенности требуют индивидуальной процедуры сериализации, а для других случаев такая конвертация не требуется.
По второму вопросу могу пояснить следующее. В моем решении функция jsonParse всегда возвращает Массив, даже если json файл содержит структуру. Это удобно с точки зрения использования, потому-что результат не требует проверки на тип данных. Если во входном файле у вас структура, то на выходе будет массив с одним элементом содержащим структуру. В демо примере сериализуется именно этот массив и получается такая разница. Но все мои пояснения были бы лишними, если бы вы ознакомились с кодом функции jsonParse, там не так много строчек и все эти особенности видны невооруженным глазом.