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-данных велик (не загружает эти данные в память), а искомое значение находится в начале файла.

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

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

Если Вы нашли ошибку или неточность, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Оценка статьи:
УжасноПлохоНеплохоХорошоОтлично (оценок: 13, средняя оценка: 5,00 из 5)
Загрузка...

Понравилась статья? Поделиться с друзьями:
Комментарии: 8
  1. i-am-a-programmer.ru

    Первая дельная статья на эту тему. Супер!

  2. Николай

    Очень полезная публикация!!!

  3. Алексей Багринцев

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

    1. Артур

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

  4. Артур

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

    1. Артур

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

  5. Игорь

    А если чтение json выполняется на стороне сервере, то как передать модуль востановления значений?

  6. Андрей

    Чтение.ОткрытьФайл(«C:\test.json»);
    А на диск С с дискетки его копировать?
    Было бы здорово увидеть пример обработки json файла полученного через веб-запрос

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

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!:

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: