Настройки сериализации json 1с

Обновлено: 04.07.2024

Формат JSON легко читается. Пример текстового файла в формате JSON:

"ОсновнойПоставщик" : "c8d578e9-9f33-11eb-80ad-364b50b7ef2d"

Как правило JSON используется для обмена данными в веб-приложениях. Однако его можно применять и для обмена данными между двумя базами 1С.

JSON может включать в себя следующие элементы:

  • Объект
  • Строка
  • Число
  • Литералы: true, false, null
  • Массив

Объект

Значением может быть любой тип:

  • Другой JSON-объект
  • Массив
  • Строка
  • Число
  • Литералы: true, false, null

В данном примере три ключа:

  • ЭтоКлюч
  • ЭтоТожеКлюч
  • ЭтоВложенныйОбъект

Строка и число

Литералы

В качестве литералов могут использоваться:

Массив

Значения массива могут быть любого типа: строки, числа, литералы, объекты и даже другие массивы:

ЗаписатьJSON

Чтобы записать данные в формате JSON из 1с нужно:

  1. Создать программный объект ЗаписьJSON
  2. Вызвать у него метод ОткрытьФайл, передав параметром путь к файлу, куда будут записаны данные в формате JSON
  3. С помощью метода глобального контекста ЗаписатьJSON выполнить сериализацию. Параметрами нужно передать созданный объект ЗаписьJSON и сами данные
  4. Закрыть ЗаписьJSON методом Закрыть

Соответствие между типами 1С и типами JSON:

Тип 1СТип JSON
СтрокаСтрока
ЧислоЧисло
Булевоtrue или false
ДатаСтрока
Неопределеноnull
МассивJSON-массив
Фиксированный массивJSON-массив
СтруктураJSON-объект
Фиксированная структураJSON-объект
СоответствиеJSON-объект
Фиксированное соответствиеJSON-объект

Ключ соответствия и фиксированного соответствия может быть только строковым.

ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON ( ПереносСтрокJSON . Авто , Символы . Таб ) ; Запись . ОткрытьФайл ( "F:\test.json" , , , ПараметрыЗаписиJSON ) ; ФиксСтруктура = Новый ФиксированнаяСтруктура ( Структура ) ; ФиксСоответствие = Новый ФиксированноеСоответствие ( Соответствие ) ;

В результате файл будет содержать следующие данные:

В коде была использована строка:

ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON ( ПереносСтрокJSON . Авто , Символы . Таб ) ;

Здесь указывается, что при записи JSON нужно использовать перенос строк (первый параметр) и символ табуляции как отступ для каждого элемента JSON (второй параметр). Это нужно чтобы файл с JSON был более читаемым. Если указать первым параметром ПереносСтрокJSON.Нет, то JSON будет записан в одну строку.

Запись массива как JSON-объект

По умолчанию массив сериализуется в JSON-массив. Но в метод ЗаписатьJSON третьим параметром можно передать настройки сериализации JSON, где указать, что массивы нужно записывать как объекты. Ключом будет индекс элемента массива.

ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON ( ПереносСтрокJSON . Авто , Символы . Таб ) ; Запись . ОткрытьФайл ( "F:\test.json" , , , ПараметрыЗаписиJSON ) ; Настройки . СериализовыватьМассивыКакОбъекты = Истина;

Сериализация таблицы значений в JSON

Таблица значений является одной из часто используемых коллекций в 1С, но для нее нет автоматической сериализации в JSON. Для сериализации можно преобразовать таблицу в массив структур, а массив сериализовать в JSON:

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

ПрочитатьJSON

Для чтения JSON файла используется программный объект ЧтениеJSON и метод ПрочитатьJSON:

  1. Создается программный объект ЧтениеJSON
  2. Методом ОткрытьФайл выполняется открытие файла с JSON
  3. Методом глобального контекста ПрочитатьJSON выполняется десериализация JSON
  4. Объект ЧтениеJSON закрывается методом Закрыть

Десериализация из JSON в типы 1С выполняется по следующим правилам:

Тип JSONТип 1С
ЧислоЧисло
СтрокаСтрока
trueИстина
falseЛожь
nullНеопределено
JSON-объектСтруктура или соответствие
JSON-массивМассив

В результате в переменной Данные будет структура со следующим содержимым:

JSON в структуру

Чтение JSON в соответствие

Сейчас все JSON-объекты были прочитаны в структуру. Даже те, которые изначально были сериализованы из соответствия. Однако, в отличии от структуры, в ключах JSON-объектов могут быть пробелы или другие символы, которые нельзя использовать в ключах структуры. Например, если бы соответствие было записано так:

Чтобы прочитать такой JSON нужно в метод ПрочитатьJSON передать вторым параметром Истина. Тогда чтение всех JSON-объектов будет выполнено в соответствие:

В результате в переменной Данные будет соответствие со следующим содержимым:

JSON в соответствие

Сериализация даты в JSON

Формат даты

При сериализации в JSON дата записывается как строка. При чтении тоже будет прочитана как строка, что не совсем удобно. Чтобы свойство с датой было прочитано как дата нужно в методе ПрочитатьJSON третьим параметром указать список имен свойств, которые должны быть прочитаны как дата. А четвертым параметром указать формат даты, в котором дата была записана в JSON. По умолчанию платформа 1С пишет дату в JSON в формате ISO.

//через запятую нужно перечислить список имен свойств, которые будут прочитаны как дата Данные = ПрочитатьJSON ( ЧтениеJSON , , ИменаСвойствСДатой , ФорматДатыJSON . ISO ) ;

В результате свойство Дата будет прочитано как дата:

Дата в JSON

Платформа 1С может записывать дату в JSON в трех форматах:

Формат ISO используется по умолчанию. Для записи в формате JavaScript или Microsoft нужно явно указать это. При этом форматы JavaScript и Microsoft могут быть записаны только в варианте даты UTC (универсальная дата).

Например, запись в формате JavaScript:

ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON ( ПереносСтрокJSON . Авто , Символы . Таб ) ; Запись . ОткрытьФайл ( "F:\test.json" , , , ПараметрыЗаписиJSON ) ; Данные . Вставить ( "СвойствоСДатой" , Дата ( 2021 , 6 , 3 , 15 , 0 , 0 ) ) ; //в настройках нужно указать формат даты и вариант записи даты НастройкиСериализацииJSON = Новый НастройкиСериализацииJSON ; НастройкиСериализацииJSON . ФорматСериализацииДаты = ФорматДатыJSON . JavaScript ; НастройкиСериализацииJSON . ВариантЗаписиДаты = ВариантЗаписиДатыJSON . УниверсальнаяДата ; ЗаписатьJSON ( Запись , Данные , НастройкиСериализацииJSON ) ;

При чтении также нужно указать формат JavaScript:

//через запятую нужно перечислить список имен свойств, которые будут прочитаны как дата Данные = ПрочитатьJSON ( ЧтениеJSON , , ИменаСвойствСДатой , ФорматДатыJSON . JavaScript ) ;

Для записи в формате Microsoft нужно указать ФорматСериализацииДаты = Microsoft:

НастройкиСериализацииJSON . ФорматСериализацииДаты = ФорматДатыJSON . Microsoft ;

И то же самое при чтении JSON:

Данные = ПрочитатьJSON ( ЧтениеJSON , , ИменаСвойствСДатой , ФорматДатыJSON . Microsoft ) ;

Для формата ISO дату можно записать в трех вариантах:

  • Локальная дата (без часового пояса)
  • Локальная дата со смещением (относительно UTC)
  • UTC (универсальная дата)
НастройкиСериализацииJSON = Новый НастройкиСериализацииJSON ; НастройкиСериализацииJSON . ФорматСериализацииДаты = ФорматДатыJSON . ISO ; НастройкиСериализацииJSON . ВариантЗаписиДаты = ВариантЗаписиДатыJSON . ЛокальнаяДата ;

Локальная дата со смещением:

НастройкиСериализацииJSON = Новый НастройкиСериализацииJSON ; НастройкиСериализацииJSON . ФорматСериализацииДаты = ФорматДатыJSON . ISO ; НастройкиСериализацииJSON . ВариантЗаписиДаты = ВариантЗаписиДатыJSON . ЛокальнаяДатаСоСмещением ; НастройкиСериализацииJSON = Новый НастройкиСериализацииJSON ; НастройкиСериализацииJSON . ФорматСериализацииДаты = ФорматДатыJSON . ISO ; НастройкиСериализацииJSON . ВариантЗаписиДаты = ВариантЗаписиДатыJSON . УниверсальнаяДата ;

ПрочитатьДатуJSON

Другой способ чтения даты из JSON это использование метода ПрочитатьДатуJSON. Сначала читаем JSON методом ПрочитатьJSON, а свойства с типом дата дополнительно читаем методом ПрочитатьДатуJSON. Первым параметром передается строковое представление даты, вторым формат даты. Результатом выполнения функции будет значение с типом дата:

Дата = ПрочитатьДатуJSON ( Формат ( Данные . СвойствоСДатой , "ЧГ=0" ) , ФорматДатыJSON . ISO ) ;

Функции преобразования и восстановления

Функция преобразования

Для возможности выгрузки данных прикладных типов 1С можно использовать функцию преобразования. Данная функция указывается в методе ЗаписатьJSON четвертым параметром. Она должна быть экспортной. Пятым параметром указывается где находится данная функция (если в этом же модуле, то нужно указать ЭтотОбъект). Шестым параметром можно указать произвольные дополнительные данные, которые будут переданы в функцию преобразования. Данная функция будет вызвана для тех типов, которые по умолчанию не сериализуются в JSON. Функция вызывается для всех свойств, включая вложенные свойства, а также для элементов массива.

Например, выгрузим контрагента, у которого в реквизите ДатаРегистрации содержится дата, в реквизите ОсновнойДоговор ссылка на справочник Договоры, а в табличной части список контактных лиц. Причем одно контактное лицо указано строкой, а второе ссылкой на справочник Контактные лица:

JSON (JavaScript Object Notation) – это текстовый формат обмена данными, широко используемый в веб-приложениях.

По сути, JSON – это строка в определенном формате и поэтому так же, как и с любой другой строкой, с ней можно работать при помощи функций работы со строками, такими как СтрНайти (), СтрЗаменить () и другими. В теории можно написать функцию, которая из произвольной строки будет формировать строку в формате данных JSON.

Но так как данный формат достаточно популярен, в платформе 1С с некоторых пор есть встроенные функции для работы с данным форматом.

С помощью данных функций платформа позволяет автоматически сгенерировать строку в JSON формате, принимая на вход значения следующих типов:

· Массив (обычный и фиксированный);

· Структура (обычная и фиксированная);

· Соответствие (обычное и фиксированное).

Ниже приведена функция, преобразующая структуру в строку JSON.

Alt: Функция преобразует структуру в строку JSON.

Функция, которая преобразует структуру в строку JSON.

2. Сериализация в JSON

Основные действия в данной функции выполняет метод глобального контекста ЗаписатьJSON ().

В данный метод передается объект типа запись JSON, который был подготовлен для записи при помощи метода УстановитьСтроку (), а также параметр ТелоJSON – та самая структура, которая должна быть преобразована.

Данное преобразование называется в JSON Сериализацией.

3. Десериализация в JSON

Аналогичным образом можно выполнить обратное преобразование, т.е. преобразовать строку JSON в структуру (или любой другой тип, который может быть записан в формат данных JSON).

Ниже представлена функция выполняющая обратное преобразование (десериализацию в JSON).

Alt: Сериализация JSON типа Дата

Функция для десериализации в JSON

В качестве входного параметра в нее передается строка в JSON. При помощи метода глобального контекста ПрочитатьJSON () выполняется преобразование в структуру.

Данные функции можно использовать при работе с запросами для быстрой и простой сериализации и десериализации.

4. Дата в JSON

Следует уделить особое внимание десериализации в JSON типа «Дата». Данный тип без проблем сериализуются в JSON, а вот с десериализацией иногда могут возникнуть трудности. JSON воспринимает тип «Дата» как строку. Для правильного формата даты при сериализации в JSON у метода ЗаписатьJSON () можно воспользоваться параметром «НастройкиСериализации».

Данный параметр, позволяет указать, в каком виде (UTC, локальная и т. д.) и в каком формате формате (ISO, JavaScript или Microsoft) будет записана дата.

Alt: Сериализация JSON

Сериализация JSON типа Дата

Строка JSON после такой сериализации будет выглядеть следующим образом:

Alt: Чтение даты

Пример строки JSON

При чтении даты из JSON всё обстоит немного по-другому. Для корректного отображения в параметр ИменаСвойствСоЗначениямиДата нужно передать те свойства JSON, значения которых нужно преобразовать в дату 1С:Предприятия (тип Дата). А в параметр ОжидаемыйФорматДаты необходимо задать формат этих данных в JSON.

Alt: Чтение даты из JSON

Чтение даты из JSON

Данный код десериализует строку JSON представленную выше в правильном формате.

Однако если теперь передавать в данную процедуру другую строку JSON (например, дата рождения будет в другом формате), будет вызвано исключение.

В такой ситуации для большей универсальности можно добавить свойства JSON в массив, который в дальнейшем будет обработан с помощью функции восстановления. И десериализовать даты JSON именно в этой функции.

JSON (JavaScript Object Notation) – это текстовый формат обмена данными, широко используемый в веб-приложениях.

По сути, JSON – это строка в определенном формате и поэтому так же, как и с любой другой строкой, с ней можно работать при помощи функций работы со строками, такими как СтрНайти (), СтрЗаменить () и другими. В теории можно написать функцию, которая из произвольной строки будет формировать строку в формате данных JSON.

Но так как данный формат достаточно популярен, в платформе 1С с некоторых пор есть встроенные функции для работы с данным форматом.

С помощью данных функций платформа позволяет автоматически сгенерировать строку в JSON формате, принимая на вход значения следующих типов:

· Массив (обычный и фиксированный);

· Структура (обычная и фиксированная);

· Соответствие (обычное и фиксированное).

Ниже приведена функция, преобразующая структуру в строку JSON.

Alt: Функция преобразует структуру в строку JSON.

Функция, которая преобразует структуру в строку JSON.

2. Сериализация в JSON

Основные действия в данной функции выполняет метод глобального контекста ЗаписатьJSON ().

В данный метод передается объект типа запись JSON, который был подготовлен для записи при помощи метода УстановитьСтроку (), а также параметр ТелоJSON – та самая структура, которая должна быть преобразована.

Данное преобразование называется в JSON Сериализацией.

3. Десериализация в JSON

Аналогичным образом можно выполнить обратное преобразование, т.е. преобразовать строку JSON в структуру (или любой другой тип, который может быть записан в формат данных JSON).

Ниже представлена функция выполняющая обратное преобразование (десериализацию в JSON).

Alt: Сериализация JSON типа Дата

Функция для десериализации в JSON

В качестве входного параметра в нее передается строка в JSON. При помощи метода глобального контекста ПрочитатьJSON () выполняется преобразование в структуру.

Данные функции можно использовать при работе с запросами для быстрой и простой сериализации и десериализации.

4. Дата в JSON

Следует уделить особое внимание десериализации в JSON типа «Дата». Данный тип без проблем сериализуются в JSON, а вот с десериализацией иногда могут возникнуть трудности. JSON воспринимает тип «Дата» как строку. Для правильного формата даты при сериализации в JSON у метода ЗаписатьJSON () можно воспользоваться параметром «НастройкиСериализации».

Данный параметр, позволяет указать, в каком виде (UTC, локальная и т. д.) и в каком формате формате (ISO, JavaScript или Microsoft) будет записана дата.

Alt: Сериализация JSON

Сериализация JSON типа Дата

Строка JSON после такой сериализации будет выглядеть следующим образом:

Alt: Чтение даты

Пример строки JSON

При чтении даты из JSON всё обстоит немного по-другому. Для корректного отображения в параметр ИменаСвойствСоЗначениямиДата нужно передать те свойства JSON, значения которых нужно преобразовать в дату 1С:Предприятия (тип Дата). А в параметр ОжидаемыйФорматДаты необходимо задать формат этих данных в JSON.

Alt: Чтение даты из JSON

Чтение даты из JSON

Данный код десериализует строку JSON представленную выше в правильном формате.

Однако если теперь передавать в данную процедуру другую строку JSON (например, дата рождения будет в другом формате), будет вызвано исключение.

В такой ситуации для большей универсальности можно добавить свойства JSON в массив, который в дальнейшем будет обработан с помощью функции восстановления. И десериализовать даты JSON именно в этой функции.

JSON (JavaScript Object Notation) – это текстовый формат обмена данными, широко используемый в веб-приложениях.

По сути, JSON – это строка в определенном формате и поэтому так же, как и с любой другой строкой, с ней можно работать при помощи функций работы со строками, такими как СтрНайти (), СтрЗаменить () и другими. В теории можно написать функцию, которая из произвольной строки будет формировать строку в формате данных JSON.

Но так как данный формат достаточно популярен, в платформе 1С с некоторых пор есть встроенные функции для работы с данным форматом.

С помощью данных функций платформа позволяет автоматически сгенерировать строку в JSON формате, принимая на вход значения следующих типов:

· Массив (обычный и фиксированный);

· Структура (обычная и фиксированная);

· Соответствие (обычное и фиксированное).

Ниже приведена функция, преобразующая структуру в строку JSON.

Alt: Функция преобразует структуру в строку JSON.

Функция, которая преобразует структуру в строку JSON.

2. Сериализация в JSON

Основные действия в данной функции выполняет метод глобального контекста ЗаписатьJSON ().

В данный метод передается объект типа запись JSON, который был подготовлен для записи при помощи метода УстановитьСтроку (), а также параметр ТелоJSON – та самая структура, которая должна быть преобразована.

Данное преобразование называется в JSON Сериализацией.

3. Десериализация в JSON

Аналогичным образом можно выполнить обратное преобразование, т.е. преобразовать строку JSON в структуру (или любой другой тип, который может быть записан в формат данных JSON).

Ниже представлена функция выполняющая обратное преобразование (десериализацию в JSON).

Alt: Сериализация JSON типа Дата

Функция для десериализации в JSON

В качестве входного параметра в нее передается строка в JSON. При помощи метода глобального контекста ПрочитатьJSON () выполняется преобразование в структуру.

Данные функции можно использовать при работе с запросами для быстрой и простой сериализации и десериализации.

4. Дата в JSON

Следует уделить особое внимание десериализации в JSON типа «Дата». Данный тип без проблем сериализуются в JSON, а вот с десериализацией иногда могут возникнуть трудности. JSON воспринимает тип «Дата» как строку. Для правильного формата даты при сериализации в JSON у метода ЗаписатьJSON () можно воспользоваться параметром «НастройкиСериализации».

Данный параметр, позволяет указать, в каком виде (UTC, локальная и т. д.) и в каком формате формате (ISO, JavaScript или Microsoft) будет записана дата.

Alt: Сериализация JSON

Сериализация JSON типа Дата

Строка JSON после такой сериализации будет выглядеть следующим образом:

Alt: Чтение даты

Пример строки JSON

При чтении даты из JSON всё обстоит немного по-другому. Для корректного отображения в параметр ИменаСвойствСоЗначениямиДата нужно передать те свойства JSON, значения которых нужно преобразовать в дату 1С:Предприятия (тип Дата). А в параметр ОжидаемыйФорматДаты необходимо задать формат этих данных в JSON.

Alt: Чтение даты из JSON

Чтение даты из JSON

Данный код десериализует строку JSON представленную выше в правильном формате.

Однако если теперь передавать в данную процедуру другую строку JSON (например, дата рождения будет в другом формате), будет вызвано исключение.

В такой ситуации для большей универсальности можно добавить свойства JSON в массив, который в дальнейшем будет обработан с помощью функции восстановления. И десериализовать даты JSON именно в этой функции.

Читайте также: