ЧтениеJson
Стд::Json::ЧтениеJson
Объект, предназначенный для потокового чтения данных в формате JSON.
Методы чтения значений выбрасывают ИсключениеЧтенияJson - в следующих случаях:
- не было начато чтение (не был вызван метод Следующий
- чтение JSON завершилось (метод Следующий вернул
Ложь)
Сравнение
Ссылочное
Иерархия типа
Базовые типы: Объект
Примеры
Общие примеры
Чтение JSON
Исходная строка JSON
[
{
"Ид": "d7ab92e4-484a-4e7c-a942-f9de21ded45b",
"ТабельныйНомер": 100101,
"Фамилия": "Иванов",
"Имя": "Иван",
"Отчество": "Иванович",
"ДатаНачалаРаботы": "2018-09-24",
"Должность": "Разработчик",
"ПерсональныеДанные": {
"ДатаРождения": "1977-11-23",
"ВоеннаяСлужба": true,
"АдресРегистрации": {
"НаселенныйПункт": "г. Москва",
"Улица": "ул. Проспект Мира",
"Дом": "11а",
"Квартира": 321
},
"ТелефонныйНомер": [
"+79991112233",
"84951234567"
]
}
},
{
"Ид": "cfdad0fb-84c5-417a-9aef-a90a1986598c",
"ТабельныйНомер": 100102,
"Фамилия": "Петров",
"Имя": "Петр",
"Отчество": "Петрович",
"ДатаНачалаРаботы": "2021-02-10",
"Должность": "Специалист техподдержки",
"ПерсональныеДанные": {
"ДатаРождения": "1990-05-01",
"ВоеннаяСлужба": false,
"АдресРегистрации": {
"НаселенныйПункт": "г. Неизвестный",
"Улица": "ул. Ленина",
"Дом": "5"
},
"ТелефонныйНомер": [
"+79993332211"
]
}
}
]
Код чтения JSON
// Структура для хранения сообщения Сотрудники
структура СтруктураСотрудникиЧтение
обз пер Сотрудники: Множество<СтруктураСотрудникЧтение>
;
// Структура для хранения сотрудника
структура СтруктураСотрудникЧтение
пер Ид: Ууид
пер ТабельныйНомер: Число
пер Фамилия: Строка
пер Имя: Строка
пер Отчество: Строка
пер ДатаНачалаРаботы: Дата
пер Должность: Строка
пер ПерсональныеДанные: СтруктураПерсональныеДанныеЧтение
;
// Структура для хранения персональных данных сотрудника
// Для необязательных полей используется составной тип с Неопределено
структура СтруктураПерсональныеДанныеЧтение
пер ДатаРождения: Дата
пер ВоеннаяСлужба: Булево
пер АдресРегистрации: СтруктураАдресРегистрацииЧтение
пер ТелефонныйНомер: Множество<Строка>?
;
// Структура для хранения адреса регистрации
// Для необязательных полей используется составной тип с Неопределено
структура СтруктураАдресРегистрацииЧтение
пер НаселенныйПункт: Строка
пер Улица: Строка
пер Дом: Строка
пер Квартира: Число?
;
метод ПрочитатьJsonСотрудники(СтрокаJson: Строка): СтруктураСотрудникиЧтение
// Объект чтения строки JSON
знч Чтение = новый ЧтениеJson(СтрокаJson)
// Переменные структур и объектов хранения данных
пер Сотрудники = новый СтруктураСотрудникиЧтение(новый Множество<СтруктураСотрудникЧтение>())
// Установка позиции на начало массива
// Если массив отсутствует, возвращается пустая СтруктураСотрудники
если не Чтение.Следующий()
возврат Сотрудники
;
// Установка позиции на первый элемент массива
// Если начало элемента отсутствует, возвращается пустая СтруктураСотрудники
если не Чтение.Следующий()
возврат Сотрудники
;
пока Чтение.ВидУзла != ВидУзлаJson.КонецМассива
// Для корректной работы метода ПрочитатьСодержимое требуется полное соответствие между целевой структурой и объектом JSON.
// Если стрктура не соответствует объекту, требуются настройки структуры через аннотации или
// ис пользование типа НастройкиЧтенияОбъектовJson для метода чтения.
//
// Метод ПрочитатьСодержимое заполняет структуру СтруктураСотрудник данными объекта.
// Структура полностью соответствует объекту JSON, поэтому настройки чтения не используются.
// В случае успешного чтения позиция переставляется в конец текущего объекта, выполняется итерация чтения следующего объекта.
пер Сотрудник = Чтение.ПрочитатьСодержимое<СтруктураСотрудникЧтение>()
Сотрудники.Сотрудники.Добавить(Сотрудник)
;
возврат Сотрудники
;
Результат со строковым представлением объекта после чтения JSON
{
{Ид=d7ab92e4-484a-4e7c-a942-f9de21ded45b, ТабельныйНомер=100101, Фамилия=Иванов, Имя=Иван, Отчество=Иванович,
ДатаНачалаРаботы=2018-09-24, Должность=Разработчик, ПерсональныеДанные={ ДатаРо ждения=1977-11-23, ВоеннаяСлужба=true,
АдресРегистрации={НаселенныйПункт=г. Москва, Улица=ул. Проспект Мира, Дом=11а, Квартира=321},
ТелефонныйНомер={+79991112233, 84951234567}}},
{Ид=cfdad0fb-84c5-417a-9aef-a90a1986598c, ТабельныйНомер=100102, Фамилия=Петров, Имя=Петр, Отчество=Петрович,
ДатаНачалаРаботы=2021-02-10, Должность=Специалист техподдержки, ПерсональныеДанные={ДатаРождения=1990-05-01,
ВоеннаяСлужба=false, АдресРегистрации={НаселенныйПункт=г. Неизвестный, Улица=ул. Ленина, Дом=5, Квартира=undefined},
ТелефонныйНомер={+79993332211}}}
}
Чтение значений различных типов
Исходная строка JSON
[
[
"значение1",
"значение2"
],
{
"Имя": "значение"
},
{
"Строка": "Строка",
"Булево": true,
"Байты": "74657374",
"БайтыBase64": "dGVzdA",
"Время": "23:59:59.999",
"Дата": "2022-12-31",
"ДатаВремя": "2022-12-31 23:59:59.999",
"Длительность": "PT144H0.005S",
"МоментISO": "2020-04-16 20:30:40Z",
"МоментMicrosoft": "/Date(1587069040345)/",
"МоментJavascript": "1587069040345",
"Ууид": "d7ab92e4-484a-4e7c-a942-f9de21ded45b",
"Число": 123.45,
"Неопределено": null
}
]
Код чтения JSON
метод ПрочитатьJsonТипы(СтрокаJson: Строка)
// Объект чтения строки JSON
знч Чтение = новый ЧтениеJson(СтрокаJson)
// Начало JSON
Чтение.Следующий()
// Массив
Чтение.Следующий()
пер Массив = Чтение.ПрочитатьСодержимоеКакМассив() // [значение1, значение2]
// Соответствие
Чтение.Следующий()
пер Соответствие = Чтение.ПрочитатьСодержимоеКакСоответствие() // {Имя: значение}
// Свойства с типами
пока Чтение.Следующий()
если Чтение.ВидУзла == ВидУзлаJson.ИмяСвойства
если Чтение.Значение == "Строка"
Чтение.Следующий()
пер Строка = Чтение.ПрочитатьСодержимоеКакСтроку() // Строка
иначе если Чтение.Значение == "Булево"
Чтение.Следующий()
пер Булево = Чтение.ПрочитатьСодержимоеКакБулево() // Истина
иначе если Чтение.Значение == "Байты"
Чтение.Следующий()
пер Байты = Чтение.ПрочитатьСодержимоеКакБайты() // 74657374
иначе если Чтение.Значение == "БайтыBase64"
Чтение.Следующий()
пер БайтыBase64 = Чтение.ПрочитатьСодержимоеКакБайтыBase64() // 74657374
иначе если Чтение.Значение == "Время"
Чтение.Следующий()
пер Время = Чтение.ПрочитатьСодержимоеКакВремя() // 23:59:59.999
ин аче если Чтение.Значение == "Дата"
Чтение.Следующий()
пер Дата = Чтение.ПрочитатьСодержимоеКакДата() // 2022-12-31
иначе если Чтение.Значение == "ДатаВремя"
Чтение.Следующий()
пер ДатаВремя = Чтение. ПрочитатьСодержимоеКакДатаВремя() // 2022-12-31 23:59:59.999
пер ВремяБезДаты = Чтение.ПрочитатьСодержимоеКакВремя(Истина) // 23:59:59.999
пер ДатаБезВремени = Чтение.ПрочитатьСодержимоеКакДата(Истина) // 2022-12-31
иначе если Чтение.Значение == "Длительность"
Чтение.Следующий()
пер Длительность = Чтение.ПрочитатьСодержимоеКакДлительность() // 144:00:00.005
иначе если Чтение.Значение == "МоментISO"
Чтение.Следующий()
пер МоментISO = Чтение.ПрочитатьСодержимоеКакМомент() // 2020-04-16T20:30:40.000Z
иначе если Чтение.Значение == "МоментMicrosoft"
Чтение.Следующий()
пер МоментMicrosoft = Чтение.ПрочитатьСодержимоеКакМомент() // 2020-04-16T20:30:40.000Z
иначе если Чтение.Значение == "МоментJavascript"
Чтение.Следующий()
пер МоментJavascript = Чтение.ПрочитатьСодержимоеКакМомент() // 2020-04-16T20:30:40.000Z
иначе если Чтение.Значение == "Ууид"
Чтение.Следующий()
пер Ууид = Чтение.ПрочитатьСодержимоеКакУуид() // d7ab92e4-484a-4e7c-a942-f9de21ded45b
иначе если Чтение.Значение == "Число"
Чтение.Следующий()
пер Число = Чтение.ПрочитатьСодержимоеКакЧисло() // 123.45
иначе если Чтение.Значение == "Неопределено"
Чтение.Следующий()
если Чтение.ВидУзла == ВидУзлаJson.Null
// Неопределено
;
;
;
;
;
Конструкторы
ЧтениеJson
ЧтениеJson(Источник: Строка)Источник.
Перегрузка
ЧтениеJson(Источник: ПотокЧтения, Кодировка: Кодировка|Строка = Кодировка.Utf8)
ЧтениеJson
ЧтениеJson(
Источник: ПотокЧтения,
Кодировка: Кодировка|Строка = Кодировка.Utf8)Stream в кодировке Кодировка.
Перегрузка
ЧтениеJson(Источник: Строка)
Свойства
ВидУзла
ТолькоЧтение
ВидУзла: ВидУзлаJson?Вид текущего узла JSON.
Неопределено, если:
- Не было начато чтение (не был вызван метод Следующий.
- Чтение JSON завершилось (метод Следующий вернул
Ложь).
Значение
ТолькоЧтение
Значение: СтрокаТекстовое значение текущего узла JSON. Для комментариев содержит пустую строку. До начала и после окончания текста JSON возвращает пустую строку.
ТекущаяСтрока
ТолькоЧтение
ТекущаяСтрока: ЧислоТекущая стр ока в позиции чтения. Нумерация начинается с 1.
При чтении следующих видов значений, позиция чтения находится сразу после прочтенного значения:
- Null,
- Булево,
- Число,
- НачалоМассива,
- КонецМассив,
- НачалоОбъекта,
- КонецОбъекта.
При чтении значения вида Строка, позиция находится сразу после открывающей кавычки
При чтении значения вида ИмяСвойства, позиция находится на том же месте, что будет при чтении значения после имени свойства.
Т.е. при чтении имени свойства в паре "value": false, когда дойдет очередь до "value", позиция будет сразу после Ложь.
ТекущийСтолбец
ТолькоЧтение
ТекущийСтолбец: ЧислоТекущий столбец в позиции чтения. Нумерация начинается с 1.
Методы
ПрочитатьСодержимое
ПрочитатьСодержимое<ТипОбъекта>(Настройки: НастройкиЧтенияОбъектовJson): ТипОбъектаСчитывает объект JSON, начиная с текущей позиции, в объект типа ТипОбъекта, с настройками Настройки. Можно читать объекты любого типа, объявленного в коде (структура, Перечисление), и некоторых встроенных типов:
- Коллекция:
- Соответствие,
- Строка,
- Число,
- Булево,
- Момент,
- Дата Время,
- Дата,
- Время,
- Длительность,
- Ууид,
- Версия,
- Перечисление,
- Байты.
Сопоставление полей и свойств происходит следующим образом:
- true, false - отображаются в Булево,
- "Любая строка" - отображается в Строка,
- Любое число, (1, 1.56, 0) - отображается в Число
- Объект { ... } - отображается в структуру либо в Соответствие,
- Массив [ ...] - отображается в Массив или Множество,
- Строка в формате Момент или ДатаВремя отображается в Момент или ДатаВремя,
- Строка в формате Ууид отображается в Ууид,
- Строка в формате