Книга: Технологии интеграции "1С:Предприятия 8.3""
Назад: Потоковая работа
Дальше: Работа со строкой JSON

Запись и чтение

Для того чтобы выполнить потоковую запись JSON-документа, необходимы записываемые данные и объект ЗаписьJSON.

Допустим, нам нужно записать в JSON-документ некоторый объект, обладающий свойствами Код, Наименование, Телефоны (массив строк), ОбъемПродаж, Поставщик.

Один JSON-файл содержит одно значение. Это то самое значение, о котором говорилось выше: объект, массив, строка, число или один из литералов. Поэтому записываем в JSON наш объект следующим образом (листинг 1.1).

Листинг 1.1. Пример потоковой записи JSON-документа

&НаСервереБезКонтекста

Процедура ПотоковаяЗаписьНаСервере()

 

// Создать объект записи и открыть файл, в который будет выполняться запись.

Запись = Новый ЗаписьJSON;

Запись.ОткрытьФайл("c:\temp\streamWrite.json", , , Новый ПараметрыЗаписиJSON(, Символы.Таб));

 

// Выполнить запись значений с помощью объекта записи (Запись).

// Записать начало нашего объекта.

Запись.ЗаписатьНачалоОбъекта();

 

// Заполнить свойство Код типа Строка.

Запись.ЗаписатьИмяСвойства("Код");

Запись.ЗаписатьЗначение("000000017");

 

// Заполнить свойство Наименование типа Строка.

Запись.ЗаписатьИмяСвойства("Наименование");

Запись.ЗаписатьЗначение("ОАО Топаз");

 

// Заполнить свойство Телефоны типа Массив.

// Поэтому после имени свойства записываем массив, состоящий из значений – строк.

Запись.ЗаписатьИмяСвойства("Телефоны");

Запись.ЗаписатьНачалоМассива();

Запись.ЗаписатьЗначение("8-999-777-55-33");

Запись.ЗаписатьЗначение("+71112223344");

Запись.ЗаписатьКонецМассива();

 

// Заполнить свойство ОбъемПродаж типа Число.

Запись.ЗаписатьИмяСвойства("ОбъемПродаж");

Запись.ЗаписатьЗначение(5000000);

 

// Заполнить свойство Поставщик типа Булево.

Запись.ЗаписатьИмяСвойства("Поставщик");

Запись.ЗаписатьЗначение(Ложь);

 

// Записать конец нашего объекта.

Запись.ЗаписатьКонецОбъекта();

 

// Завершить работу с файлом.

Запись.Закрыть();

 

КонецПроцедуры

Содержимое процедуры понятно из комментариев в тексте листинга. Поэтому не будем еще раз на этом останавливаться. Про параметры записи JSON, переданные четвертым параметром в метод ОткрытьФайл(), будет рассказано ниже, в разделе «».

В результате сформированный JSON-документ будет иметь следующий вид (листинг 1.2).

Листинг 1.2. Содержимое JSON-документа

{

"Код": "000000017",

"Наименование": "ОАО Топаз",

"Телефоны": [

"8-999-777-55-33",

"+71112223344"

],

"ОбъемПродаж": 5000000,

"Поставщик": false

}

Теперь представим, что мы хотим записать не какой-то абстрактный объект, а объект, обладающий собственным именем – Контрагент1. Возможно, вместе с ним мы захотим записать и другой аналогичный объект с именем Контрагент2. Как поместить это в один JSON-файл?

Поскольку, как мы говорили, JSON-файл может содержать только одно значение, мы запишем в него корневой объект с единственным свойством. Имя этого свойства – это имя нашего объекта, а значение этого свойства – это совокупность свойств, которыми обладает наш объект (листинг 1.3).

Листинг 1.3. Пример потоковой записи JSON-документа

&НаСервереБезКонтекста

Процедура ПотоковаяЗаписьНаСервере()

 

// Создать объект записи и открыть файл, в который будет выполняться запись.

Запись = Новый ЗаписьJSON;

Запись.ОткрытьФайл("c:\temp\streamWrite_2.json", , , Новый ПараметрыЗаписиJSON(, Символы.Таб));

 

// Выполнить запись значений с помощью объекта записи (Запись).

// Записать начало корневого объекта.

Запись.ЗаписатьНачалоОбъекта();

 

// Записать имя свойства корневого объекта.

Запись.ЗаписатьИмяСвойства("Контрагент1");

 

// Записать начало нашего объекта.

Запись.ЗаписатьНачалоОбъекта();

 

// Заполнить свойство Код типа Строка.

Запись.ЗаписатьИмяСвойства("Код");

Запись.ЗаписатьЗначение("000000017");

 

// Заполнить свойство Наименование типа Строка.

Запись.ЗаписатьИмяСвойства("Наименование");

Запись.ЗаписатьЗначение("ОАО Топаз");

 

// Заполнить свойство Телефоны типа Массив.

// Поэтому после имени свойтва записываем массив, состоящий из значений – строк.

Запись.ЗаписатьИмяСвойства("Телефоны");

Запись.ЗаписатьНачалоМассива();

Запись.ЗаписатьЗначение("8-999-777-55-33");

Запись.ЗаписатьЗначение("+71112223344");

Запись.ЗаписатьКонецМассива();

 

// Заполнить свойство ОбъемПродаж типа Число.

Запись.ЗаписатьИмяСвойства("ОбъемПродаж");

Запись.ЗаписатьЗначение(5000000);

 

// Заполнить свойство Поставщик типа Булево.

Запись.ЗаписатьИмяСвойства("Поставщик");

Запись.ЗаписатьЗначение(Ложь);

 

// Записать конец нашего объекта.

Запись.ЗаписатьКонецОбъекта();

 

// Записать конец корневого объекта.

Запись.ЗаписатьКонецОбъекта();

 

// Завершить работу с файлом.

Запись.Закрыть();

 

КонецПроцедуры

В результате сформированный JSON-документ будет иметь следующий вид (листинг 1.4).

Листинг 1.4. Содержимое JSON-документа

{

"Контрагент1": {

"Код": "000000017",

"Наименование": "ОАО Топаз",

"Телефоны": [

"8-999-777-55-33",

"+71112223344"

],

"ОбъемПродаж": 5000000,

"Поставщик": false

}

}

Если требуется записать в этот же файл второй объект Контрагент2, то нам нужно просто добавить к корневому объекту еще одно свойство (Контрагент2) и его значение (листинг 1.5).

Листинг 1.5. Пример потоковой записи JSON-документа

&НаСервереБезКонтекста

Процедура ПотоковаяЗаписьНаСервере()

 

// Создать объект записи и открыть файл, в который будет выполняться запись.

Запись = Новый ЗаписьJSON;

Запись.ОткрытьФайл("c:\temp\streamWrite_3.json", , , Новый ПараметрыЗаписиJSON(, Символы.Таб));

 

// Выполнить запись значений с помощью объекта записи (Запись).

// Записать начало корневого объекта.

Запись.ЗаписатьНачалоОбъекта();

 

// Записать имя первого свойства корневого объекта.

Запись.ЗаписатьИмяСвойства("Контрагент1");

 

// Записать начало первого объекта.

Запись.ЗаписатьНачалоОбъекта();

 

 

// Записать конец первого объекта.

Запись.ЗаписатьКонецОбъекта();

 

// Записать имя второго свойства корневого объекта.

Запись.ЗаписатьИмяСвойства("Контрагент2");

 

// Записать начало второго объекта.

Запись.ЗаписатьНачалоОбъекта();

 

 

// Записать конец второго объекта.

Запись.ЗаписатьКонецОбъекта();

 

// Записать конец корневого объекта.

Запись.ЗаписатьКонецОбъекта();

 

// Завершить работу с файлом.

Запись.Закрыть();

 

КонецПроцедуры

В результате сформированный JSON-документ будет иметь следующий вид (листинг 1.6).

Листинг 1.6. Содержимое JSON-документа

{

"Контрагент1": {

"Код": "000000017",

"Наименование": "ОАО Топаз",

"Телефоны": [

"8-999-777-55-33",

"+71112223344"

],

"ОбъемПродаж": 5000000,

"Поставщик": false

},

"Контрагент2": {

"Код": "000000018",

"Наименование": "ОАО Алмаз",

"Телефоны": [

"8-111-222-33-44",

"+78886664422"

],

"ОбъемПродаж": 6000000,

"Поставщик": true

}

}

Потоковое чтение JSON-документа выполняется с помощью объекта ЧтениеJSON. Документ открывается для чтения и поэлементно считывается в цикле. При этом разработчик определяет, что считано, и соответствующим образом обрабатывает считываемые данные.

Простейший вариант чтения JSON-документа может быть выполнен с помощью следующей процедуры (листинг 1.7).

Листинг 1.7. Пример потокового чтения JSON-документа

&НаСервереБезКонтекста

Процедура ПотоковоеЧтениеНаСервере()

 

Сообщение = Новый СообщениеПользователю;

 

// Создать объект чтения и открыть файл, из которого будет выполняться чтение.

Чтение = Новый ЧтениеJSON;

Чтение.ОткрытьФайл("c:\temp\streamWrite_2.json");

 

// Выполнить чтение поэлементно в цикле.

Пока Чтение.Прочитать() Цикл

 

Если Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.ИмяСвойства Тогда

Сообщение.Текст = "Имя = " + Чтение.ТекущееЗначение;

Сообщение.Сообщить();

КонецЕсли;

 

Если Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.Булево Или

Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.Строка Или

Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.Число Или

Чтение.ТипТекущегоЗначения = ТипЗначенияJSON.Комментарий Тогда

Сообщение.Текст = "Значение = " + Чтение.ТекущееЗначение;

Сообщение.Сообщить();

КонецЕсли;

КонецЦикла;

 

// Завершить работу с файлом.

Чтение.Закрыть();

 

КонецПроцедуры

Результат чтения JSON-документа, содержимое которого показано в листинге 1.4, будет выглядеть следующим образом (рис. 1.1).

Рис. 1.1. Потоковое чтение JSON-документа

Назад: Потоковая работа
Дальше: Работа со строкой JSON