JSON в 1С

 

Версия технологической платформы 8.3.6 принесла с собой встроенные объекты для работы с JSON, таки образом моя прошлая статья более не является актуальной, но все еще может пригодиться, если у Вас нет возможности использовать новые версии технологической платформы.

В этой статье будет рассмотрена работа с JSON в 1С стандартными средствами.

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

JSON — это достаточно лаконичный формат, что выгодно отличает его от того же XML.

Для начала приведу небольшую теоретическую выдержку с портала ИТС.

Формат JSON является универсальным способом представления при обмене данными. Данные в формате JSON представляют собой (в закодированном виде):

  • Объект – неупорядоченное множество пар ключ:значение, заключенный в фигурные скобки ({}). Пары ключ:значение разделяются запятыми (,);
  • Массив – множество значений. Массив заключается в квадратные скобки ([]). Значения разделяются запятыми (,);
  • Значение – может быть строкой, числом, объектом, массивов или литералом true, false, null:
    • Строка – набор символов, заключенный в двойные кавычки («»);
    • Число – сериализуется с разделителем точка (.). Точность числа не ограничена.

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

Для начала рассмотрим запись в JSON. Запишем простую структуру:

Представление дат определяется двумя свойствами объекта «НастройкиСериализацииJSON» и соответствующими системными перечислениями «ФорматДатыJSON» и «ВариантЗаписиДатыJSON».

При этом формат даты «JavaScript» и «Microsoft» можно указать, только если вариант записи даты — универсальная дата, иначе при записи возникнет ошибка:

Ошибка при записи JSON
Ошибка при записи JSON

Далеко не все типы данных системы 1С являются JSON-сериализуемыми, решить эту проблему можно при помощи т.н. функции преобразования (отмеченной ключевым словом «Экспорт»). При этом формат сериализации нужно будет прописать в ручную, пример:

Часто бывает, что у нас нет готового объекта для записи, а есть некие данные, которые нуждаются в какой-то предварительной обработке (например выборка запроса), чтобы не формировать промежуточный объект, можно воспользоваться потоковой записью:

В коде выше используется объект «ПараметрыЗаписиJSON» с помощью которого можно указать вид переноса строк, символ отступа, использование двойных кавычек, а так же необходимость экранирования различных символов.

При формировании документа JSON можно совмещать объектную и потоковую запись.

 

Теперь перейдем к чтению JSON, самый простой вариант:

Чтение JSON
Чтение JSON

В примере выше отдельно показано преобразование даты JSON в дату 1С.

Также как и для записи, для чтения существует вариант с т.н. функцией восстановления:

Чтение JSON с функцией восстановления
Чтение JSON с функцией восстановления

Результат практически тот же самый, но «ДатаJSON» и «uidJSON» приведены к типам 1С.

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

Простой вариант потокового чтения выглядит так:

На этом все, надеюсь эта статья Вам помогла.

6 комментариев к “JSON в 1С

  1. Никак не описана передача дробного числа со значением после запятой, вот где главная засада.

    • Так дробные числа передаются без проблем, в крайнем случае можно преобразовывать в строку через Формат, или еще как вариант через кратность, например 3.456 * 1000, зная кратность, можно выполнить обратное преобразование 3456 / 1000, таким образом дробные числа превращаются в целые.

  2. В примере чтения даты дата представлена строкой, а если дата представлена числом, например 1506550142409, как это чтение преобразовать в тип Дата?

    • Вот нашел решение:
      СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON,,, ФорматДатыJSON.JavaScript);
      Дата =ПрочитатьДатуJSON(«new Date(» + Формат(СтруктураОтвета.date, «ЧГ=») + «)», ФорматДатыJSON.JavaScript);

Оставить комментарий