ЗаписьJSON в 1С — часть 1

Потоковая работа с JSON в 1С — это обработка данных построчно или поэлементно, без загрузки всего JSON-документа в память. Это критически важно при работе с очень большими файлами, когда полный парсинг может привести к переполнению памяти или сильному торможению.

Начну с простых вещей. JSON (JavaScript Object Notation) — это текстовый формат хранения и обмена данными, который представляет данные в виде ключ–значение (как словарь или структура). Например:

{
  "имя": "Анна",
  "возраст": 30,
  "дети": ["Петя", "Маша"],
  "работает": true
}

И если такое написать в JS — дело одной минуты, то средствами 1С всё происходит несколько иначе.

Открывающиеся и закрывающиеся фигурные скобки — начало и конец объекта

&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
        ПотоковаяЗаписьНаСервереJSON();
КонецПроцедуры

&НаСервере
Процедура ПотоковаяЗаписьНаСервереJSON()
	// Создается объект и открывается файл в котором будет производиться запись
	Запись =  Новый ЗаписьJSON;                                   
	
	// Устанавливаются параметры записи (необязательно)
	ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(,Символы.Таб);
	Запись.ОткрытьФайл("путь\имя",,,ПараметрыЗаписи);

	// левая фигурная скобка
	Запись.ЗаписатьНачалоОбъекта();

	// правая фигурная
	Запись.ЗаписатьКонецОбъекта();
		
	Запись.Закрыть();
	
КонецПроцедуры // ВызовJSON()

и в результате получается файл с содержимым вида {}

Пишу пару ключ — значение

Ключ называется ИмяСвойства (почему не ЗаписатьКлюч — не знаю), Значение — значение:

        Запись.ЗаписатьИмяСвойства("Имя");
	Запись.ЗаписатьЗначение("Анна");
	
	Запись.ЗаписатьИмяСвойства("Возраст");
	Запись.ЗаписатьЗначение(30);
	
	Запись.ЗаписатьИмяСвойства("Работает");
	Запись.ЗаписатьЗначение(ИСТИНА);

и результат:

Добавляю массив

Первое — добавляю ЗаписатьИмяСвойства (Ключ), затем его значение в виде массива через ЗаписатьНачалоМассива (читаем [) затем ЗаписьЗначений — элементы массива и после ЗаписатьКонецМассива (читаем ])

        Запись.ЗаписатьИмяСвойства("Дети");
	Запись.ЗаписатьНачалоМассива();
	Запись.ЗаписатьЗначение("Петя");
	Запись.ЗаписатьЗначение("Маша");
	Запись.ЗаписатьКонецМассива();

с результатом:

Полный код


&НаКлиенте
Процедура ОбработкаКоманды(ПараметрКоманды, ПараметрыВыполненияКоманды)
	
	ПотоковаяЗаписьНаСервереJSON();
	
КонецПроцедуры

&НаСервере
Процедура ПотоковаяЗаписьНаСервереJSON()
	
	// Создается объект и открывается файл в котором будет производиться запись
	Запись =  Новый ЗаписьJSON;                                   
	
	ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(,Символы.Таб);
	Запись.ОткрытьФайл("путь\имя",,,ПараметрыЗаписи);
	
	// Открывающая фигурная скобка
	Запись.ЗаписатьНачалоОбъекта(); 
	
	// Первая пара ключ-значение
	Запись.ЗаписатьИмяСвойства("Имя");
	Запись.ЗаписатьЗначение("Анна");
	
	// Вторая пара ключ-значение
	Запись.ЗаписатьИмяСвойства("Возраст");
	Запись.ЗаписатьЗначение(30);
	
	// Третья пара ключ-значение
	Запись.ЗаписатьИмяСвойства("Работает");
	Запись.ЗаписатьЗначение(ИСТИНА);  
	
	// Массив
	Запись.ЗаписатьИмяСвойства("Дети");
	Запись.ЗаписатьНачалоМассива();
	Запись.ЗаписатьЗначение("Петя");
	Запись.ЗаписатьЗначение("Маша");
	Запись.ЗаписатьКонецМассива();
	
	// закрывающая фигурная скобка
	Запись.ЗаписатьКонецОбъекта();
	
	//Завершает запись JSON. Если производилась запись в файл, то файл закрывается. 
	Запись.Закрыть();
	
	
КонецПроцедуры

Для тех, кто дочитал до конца

И может задаться вопросом — почему в ПараметрыЗаписи = Новый ПараметрыЗаписиJSON(,Символы.Таб);

второй аргумент стоит Символы.Таб хотя в подсказке идет «Строка» то есть по идее должны быть «» и в них что-то

Все дело в том, что согласно Синтакс-помощнику:

Символы (Chars)
Таб (Tab)
Описание:
Тип: Строка.

Символ табуляции (горизонтальной).

Добавить комментарий