Трудности
Однажды пришлось столкнуться с обработкой больших пакетов данных, и обработка пакета 2.2 мб за ~ 60 секунд, для нас это было долго.
Решили опробовать штаного зверя, обход такого пакета данных по средствам чтения занял ~ 1-1.5 сек.
Пока ЧтениеJSON.Прочитать() Цикл
Но из-за того, что куча сервисов уже работает со структурой данных, который возвращает парсер от Переверзева Александра, было принято решение сделать аналогичную структуру только штатными средствами платформы
Результат
В итоге обработка такого пакета данных в 2.2 мб с возвратом уже привычной структуры заняла ~ 2.5 секунды.
Проведя небольшие тесты, выяснили, что штатный способ в разы быстрее и на маленьких объемах, поэтому пришлось добавить небольшой обработчик сервисов, которые работают под управлением различных версий конфигурации.
Пример части кода 1С:JSON и штаного парсера ниже.
// JSON парсер.
&НаКлиенте
Функция ПрочитатьJSONИзФайла(Значение, Стандарт = Истина, ПредставленияСсылок = Ложь) Экспорт
Попытка
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.Закрыть();
Возврат jsonПрочитатьПлатформой(Значение);
Исключение
Возврат jsonПрочитатьИнициализация(Значение, Стандарт, ПредставленияСсылок);
КонецПопытки;
КонецФункции // ПрочитатьJSON()
&НаКлиенте
Функция jsonПрочитатьПлатформой(Значение)
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Значение);
Результат = Неопределено;
СформироватьДерево(ЧтениеJSON, Результат);
ЧтениеJSON.Закрыть();
Возврат Результат;
КонецФункции
&НаКлиенте
Процедура СформироватьДерево(ЧтениеJSON, Дерево)
ИмяСвойства = Неопределено;
Пока ЧтениеJSON.Прочитать() Цикл
TипJSON = ЧтениеJSON.ТипТекущегоЗначения;
Если TипJSON = ТипЗначенияJSON.НачалоОбъекта
ИЛИ TипJSON = ТипЗначенияJSON.НачалоМассива Тогда
НовыйОбъект = ?(TипJSON = ТипЗначенияJSON.НачалоОбъекта, Новый Соответствие, Новый Массив);
Если ТипЗнч(Дерево) = Тип("Массив") Тогда
Дерево.Добавить(НовыйОбъект);
ИначеЕсли ТипЗнч(Дерево) = Тип("Соответствие") И ЗначениеЗаполнено(ИмяСвойства) Тогда
Дерево.Вставить(ИмяСвойства, НовыйОбъект);
КонецЕсли;
СформироватьДерево(ЧтениеJSON, НовыйОбъект);
Если Дерево = Неопределено Тогда
Дерево = НовыйОбъект;
КонецЕсли;
ИначеЕсли TипJSON = ТипЗначенияJSON.ИмяСвойства Тогда
ИмяСвойства = ЧтениеJSON.ТекущееЗначение;
ИначеЕсли TипJSON = ТипЗначенияJSON.Число
ИЛИ TипJSON = ТипЗначенияJSON.Строка
ИЛИ TипJSON = ТипЗначенияJSON.Булево
ИЛИ TипJSON = ТипЗначенияJSON.Null Тогда
Если ТипЗнч(Дерево) = Тип("Массив") Тогда
Дерево.Добавить(ЧтениеJSON.ТекущееЗначение);
ИначеЕсли ТипЗнч(Дерево) = Тип("Соответствие") Тогда
Дерево.Вставить(ИмяСвойства, ЧтениеJSON.ТекущееЗначение);
КонецЕсли;
Иначе
Возврат;
КонецЕсли;
КонецЦикла;
КонецПроцедуры
Надеюсь, пример функции будет полезен и сэкономит кому-то время.