Особенности
Парсер и сериализатор поддерживают два режима (формата) работы:
- Стандартный – полная поддержка стандарта JSON;
- Альтернативный – направлен на применение в проектах подразумевающих постоянный двусторонний обмен данными и требующих повышенную скорость парсинга, минимизацию пересылаемых пакетов и однозначную идентификацию ссылочных типов во входящих данных.
Независимо от режима работы сериализатор, по требованию, позволяет автоматически передавать не только уникальный идентификатор ссылки, но и ее представление, а парсер в свою очередь, анализируя входные данные, опускает представления ссылок, не включая их в результирующий набор данных.
При необходимости, сериализатор может маскировать кириллические символы современных алфавитов славянских языков “АБВГҐДЂЃЕf4;ЁЄЖЗЅИg7;ІЇЙЈКЛЉМНЊОПРСТЋЌУЎФХЦЧЏШЩЪЫЬЭЮЯ”.
Поддерживаются все среды исполнения с ограничением сериализуемых типов. Используется кроссплатформенный код.
Альтернативный режим
- Не поддерживается форматирование, как во входящих, так и в исходящих данных;
- Сериализация ссылочных типов в строковое служебное представление.
Приятности
Парсер
- Устойчивость к некорректным данным и не подверженность injection атакам;
- Продвинутый синтаксический анализатор (указывает место и тип ошибки в данных);
- Поддержка форматирования во входящих данных (только стандартный режим);
- Безопасный разбор форматирования - незамаскированные символы форматирования в строковых значениях не будут утеряны;
- Поддержка строк в одинарных и в двойных кавычках;
- Автоматическое приведение объекта к структуре или соответствию в зависимости от имен свойств;
- Автоматическое преобразование к типу Дата строки вида “9999-99-99T99:99:99Z”;
- Автоматическое преобразование к типу УникальныйИдентификатор строки вида “xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”;
- Автоматического определение режима (стандартного или альтернативного) входящих данных;
- Автоматического определение необходимости отсечения представления ссылок;
- Однозначная идентификация ссылок (только альтернативный режим).
Сериализатор
- Поддержка форматирования исходящих данных (только стандартный режим);
- Широкий состав сериализуемых типов данных, в том числе ссылок;
- Автоматическое приведение значений ключей соответствий к строковому представлению 1C;
- Автоматическое преобразование неподдерживаемых типов к строке;
- Нечувствительность к локализации.
Неприятности
- Нестандартно форматированный код (Alt+Shift+F в помощь) на грани читаемости;
- Сериализатор ориентирован на средние-крупные пакеты данных.
Сериализуемые типы
- Неопределено;
- Null;
- Примитивные типы (все);
- Универсальные коллекции значений (все);
- УникальныйИдентификатор;
- ЛюбаяСсылка;
- Запрос;
- РезультатЗапроса;
- ВыборкаИзРезультатаЗапроса;
- ПостроительЗапроса;
- ПостроительОтчета;
- ДанныеФормыКоллекция (только 8.2);
- ДанныеФормыСтруктураСКоллекцией (только 8.2);
- ДанныеФормыДерево (только 8.2)
- ДвоичныеДанные;
- Картинка;
- ХранилищеЗначения.
Порядок сериализации типов
- Неопределено – сериализуется как Null;
- Null – согласно стандарту;
- Примитивные типы – согласно стандарту;
- Массивы и COMSafeArray – массив, согласно стандарту:
[ Значение, ... ]
- Структуры и соответствия – объект, согласно стандарту;
{ Ключ:Значение, ... }
- СписокЗначений – массив объектов с тремя свойствами “Значение”, “Представление” и “Пометка”;
[ { "Значение":Значение, "Представление":Представление, "Пометка":Пометка }, ... ]
- КлючИЗначение – объект с двумя свойствами “Ключ” и “Значение”;
{ "Ключ":Ключ, "Значение":Значение }
- ТаблицаЗначений – массив объектов:
[ { Колонка:Значение, ... }, ... ]
- ДеревоЗначений – массив объектов с обязательным свойством “Строки”:
[ { Колонка:Значение, ... , "Строки":[ { Колонка:Значение, ... , "Строки":[ ... ] } , ... ] }, ... ]
- УникальныйИдентификатор – приведение к строке вида “xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”;
- ЛюбаяСсылка:
- – Стандартный режим – получение уникального идентификатора ссылки и его сериализация;
- – Альтернативный режим – приведение к строке служебного вида “¦ref¦ ... ¦”.
При сериализации ссылок в режиме автоматически передачи не только сериализованного значения ссылки, но и ее представления. Каждая ссылка передается как объект с двумя свойствами “Ссылка” и “Представление”.
{ "Ссылка":Ссылка, "Представление":Представление }
- Запрос – автоматически выполняется и сериализуется как таблица значений;
- РезультатЗапроса – сериализуется как таблица значений;
- ВыборкаИзРезультатаЗапроса – сериализуется как структура значений текущей запись результата запроса;
- ПостроительЗапроса – автоматически выполняется и сериализуется как таблица значений;
- ПостроительОтчета – автоматически выполняется и сериализуется как таблица значений;
- ДанныеФормыКоллекция – сериализуется как таблица значений;
- ДанныеФормыСтруктураСКоллекцией – сериализуется как таблица значений;
- ДанныеФормыДерево – сериализуется как дерево значений;
- ДвоичныеДанные – кодируется по алгоритму base64 и сериализуется как строка;
- Картинка – автоматически преобразуется и сериализуется как двоичные данные;
- ХранилищеЗначения – автоматически извлекается сохраненное значение и сериализуется в зависимости от типа извлеченного значения.
Рекомендация
При работе с проектами, в исходящих строковых данных которых не гарантируется отсутствие символов из диапазонов:
- [0x007f, 0x009f], 0x00ad, [0x0600, 0x0604], 0x070f, [0x17b4, 0x17b5],
- [0x200c, 0x200f], [0x2028, 0x202f] [0x2060, 0x206f], 0xfeff, [0xfff0, 0xffff]
рекомендуется не отключать настройку полного маскирования символов.
Производительность
Производительность парсера исключительно зависит от набора входящих данных, а также от наличия форматирования. Наихудшим вариантом является форматированный массив чисел, наилучшим – неформатированный массив строк.
Intel Core 2 Duo T5870 @ 2GHz – форматированный массив со всеми приблизительно равномерно встречающимися типами данных:
Парсер: 35 Кбайт/с.
Сериализатор: 165 Кбайт/с.
История изменений
- Версия 2.0.0.18:
- – (Изменение) При сериализации строк специальный символ бекслеш ( \ ) более не маскируется;
- – (Оптимизация) Устранена существенная деградация производительности при парсинге JSON большого размера;
- – (Исправление) Исправлены опечатки.
- Версия 2.0.0.17:
- – (Новое) Маскирование кириллических символов современных алфавитов славянских языков (по требованию);
- – (Новое) Поддержка сериализатором типов: ДвоичныеДанные, Картинка, ХранилищеЗначения;
- – (Изменение) Рефакторинг переменных и процедур;
- – (Исправление) Сериализация типа COMSafeArray;
- – (Исправление) Удалены лишние ключевые слова "Экспорт".
- – (Оптимизация) Уменьшение проверок связанных с режимом и параметрами парсинга и сериализцаии;
- – (Оптимизация) Проверка необходимости анализа форматирования вынесена из процедуры анализа форматирования;
- – (Оптимизация) Изменен алгоритм автоматического приведение объекта к структуре или соответствию в зависимости от имен свойств;
- – (Оптимизация) Отказ от явного приведения типов в пользу неявного в операторах условий;
- – (Оптимизация) Отказ от оператора "Попытка Исключение" при преобразовании строки к уникальному идентификатору;
- – (Оптимизация) Изменен порядок проверки типов при парсинге.
- Версия 2.0.0.15:
- – Релиз.