Стд::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
{
{Ид=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.ИмяСвойства
если Чтение.Значение == "Строка"
Чтение.Следующий()
пер Строка = Чтение.ПрочитатьСодержимоеКакСтроку()
иначе если Чтение.Значение == "Булево"
Чтение.Следующий()
пер Булево = Чтение.ПрочитатьСодержимоеКакБулево()
иначе если Чтение.Значение == "Байты"
Чтение.Следующий()
пер Байты = Чтение.ПрочитатьСодержимоеКакБайты()
иначе если Чтение.Значение == "БайтыBase64"
Чтение.Следующий()
пер БайтыBase64 = Чтение.ПрочитатьСодержимоеКакБайтыBase64()
иначе если Чтение.Значение == "Время"
Чтение.Следующий()
пер Время = Чтение.ПрочитатьСодержимоеКакВремя()
иначе если Чтен ие.Значение == "Дата"
Чтение.Следующий()
пер Дата = Чтение.ПрочитатьСодержимоеКакДата()
иначе если Чтение.Значение == "ДатаВремя"
Чтение.Следующий()
пер ДатаВремя = Чтение.ПрочитатьСодержимоеКакДатаВремя()
пер ВремяБезДаты = Чтение.ПрочитатьСодержимоеКакВремя(Истина)
пер ДатаБезВремени = Чтение.ПрочитатьСодержимоеКакДата(Истина)
иначе если Чтение.Значение == "Длительность"
Чтение.Следующий()
пер Длительность = Чтение.ПрочитатьСодержимоеКакДлительность()
иначе если Чтение.Значение == "МоментISO"
Чтение.Следующий()
пер МоментISO = Чтение.ПрочитатьСодержимоеКакМомент()
иначе если Чтение.Значение == "МоментMicrosoft"
Чтение.Следующий()
пер МоментMicrosoft = Чтение.ПрочитатьСодержимоеКакМомент()
иначе если Чтение.Значение == "МоментJavascript"
Чтение.Следующий()
пер МоментJavascript = Чтение.ПрочитатьСодержимоеКакМомент()
иначе если Чтение.Значение == "Ууид"
Чтение.Следующий()
пер Ууид = Чтение.ПрочитатьСодержимоеКакУуид()
иначе если Чтение.Значение == "Число"
Чтение.Следующий()
пер Число = Чтение.ПрочитатьСодержимоеКакЧисло()
иначе если Чтение.Значение == "Неопределено"
Чтение.Следующий()
если Чтение.ВидУзла == ВидУзлаJson.Null
;
;
;
;
;
Конструкторы
ЧтениеJson
Перегрузка:
ЧтениеJson(Источник:
ПотокЧтения, Кодировка:
Кодировка|
Строка = Кодировка.Utf8)
Конструктор чтения JSON из строки Источник
.
ЧтениеJson
Перегрузка:
ЧтениеJson(Источник:
Строка)
Конструктор чтения JSON из потока Stream
в кодировке Кодировка
.
Свойства
ВидУзла
ТолькоЧтение
Вид текущего узла JSON.
Undefined
, если:
- Не было начато чтение (не был вызван метод Следующий.
- Чтение JSON завершилось (метод Следующий вернул
Ложь
).
Значение
ТолькоЧтение
Текстовое значение текущего узла JSON.
Для комментариев содержит пустую строку.
До начала и после окончания текста JSON возвращает пустую строку.
ТекущаяСтрока
ТолькоЧтение
Текущая строка в позиции чтения.
Нумерация начинается с 1.
При чтении следующих видов значений, позиция чтения находится сразу после прочтенного значения:
- Null,
- Булево,
- Число,
- НачалоМассива,
- КонецМассив,
- НачалоОбъекта,
- КонецОбъекта.
При чтении значения вида Строка
, позиция находится сразу после открывающей кавычки
При чтении значения вида ИмяСвойства
, позиция находится на том же месте, что будет при чтении значения после имени свойства.
Т.е. при чтении имени свойства в паре "value": false
, когда дойдет очередь до "value"
, позиция будет сразу после false
.
ТекущийСтолбец
ТолькоЧтение
Текущий столбец в позиции чтения.
Нумерация начинается с 1.
Методы
ПрочитатьСодержимое
ТипОбъекта: тип считываемого объекта.
Считывает объект JSON, начиная с текущей позиции, в объект типа ТипОбъекта
, с настройками Настройки
. Можно читать объекты любого типа, объявленного в коде (структура, Перечисление), и некоторых встроенных типов:
- Коллекция:
- Соответствие,
- Строка,
- Число,
- Булево,
- Момент,
- ДатаВремя,
- Дата,
- Время,
- Длительность,
- Ууид,
- Версия,
- Перечисление,
- Байты.
Сопоставление полей и свойств происходит следующим образом:
- true, false - отображаются в Булево,
- "Любая строка" - отображается в Строка,
- Любое число, (1, 1.56, 0) - отображается в Число
- Объект { ... } - отображается в структуру либо в Соответствие,
- Массив [ ...] - отображается в Массив или Множество,
- Строка в формате Момент или ДатаВремя отображается в Момент или ДатаВремя,
- Строка в формате Ууид отображается в Ууид,
- Строка в формате Версия отображается в Версия.
Имя свойства в структуре сопоставляется с именем свойства в исходном JSON.
Если необходимого поля структуры нет в читаемом тексте JSON, тогда значение поле устанавливается в Неопределено.
Исключения
ИсключениеЧтенияJson - если данные в исходном тексте JSON не получается прочитать как тип данных, указанный в структуре.
Так же исключение будет выброшено в случае если ЧтениеJson позиционировано на неподходящем виде узла.
- Если ТипОбъекта - Массив или Множество ожидается что текущий узел НачалоМассива.
- Если ТипОбъекта - Соответствие или структура определенная в коде, ожидается что текущий узел НачалоОбъекта.
- Для остальных типов ожидается что текущий узел соответствует типу ТипОбъекта.
ПрочитатьСодержимоеКакБайты
ПрочитатьСодержимоеКакБайты(): Байты
Читает содержимое узла JSON как шестнадцатеричное число и декодирует ее в байты. Разряды числа - символы из интервала
[A-Fa-f0-9]
, которые могут быть разделены пробелами в произвольных местах.
После вызова метода, позиция чтения не изменяется.
Исключения
ИсключениеЧтенияJson - если строка не является шестнадцатеричным представлением последовательности символов.
ПрочитатьСодержимоеКакБайтыBase64
ПрочитатьСодержимоеКакБайтыBase64(): Байты
Возвращает содержимое узла JSON, если это строка в формате
Base64
и декодирует ее в байты.
После вызова метода, позиция чтения не изменяется.
Исключения
ИсключениеЧтенияJson - если строка не в формате Base64
ПрочитатьСодержимоеКакБулево
ПрочитатьСодержимоеКакБулево(): Булево
Возвращает содержимое узла JSON, если он является логическим значением.
Исключения