Опишите ошибку
Есть объект для последовательного чтения json - ЧтениеJSON.
Когда значение свойства json это строка и эта строка содержит дату в формате ISO ("2026-05-13T22:51:46Z") - ЧтениеJSON вместо того чтобы определить тип такого значения как ТипТекущегоЗначения.Строка - возвращает ТипТекущегоЗначения.Ничего. Соответственно и значение получить не получается т.к. при типе ТипТекущегоЗначения.Ничего обращение к ТекущееЗначение генерирует исключение.
Другими словами значение такого свойства просто невозможно получить
Воспроизведение ошибки
Steps to reproduce the behavior:
Вот тест, демонстрирующий это поведение.
Для json вида { "lastSignInTime"": ""2026-05-13T22:51:46Z" } ожидаем, что при чтении объектом ЧтениеJSON типы будут такие:
НачалоОбъекта - ИмяСвойства - Строка - КонецОбъекта
Фактически получаем:
НачалоОбъекта - ИмяСвойства - Ничего - КонецОбъекта
// проверяемая строка json
СтрокаJSON = "{ ""lastSignInTime"": ""2026-05-13T22:51:46Z"" }";
// какие типы должны быть при последовательном чтении
ЭталонЗначения = Новый Массив;
ЭталонЗначения.Добавить( ТипЗначенияJSON.НачалоОбъекта );
ЭталонЗначения.Добавить( ТипЗначенияJSON.ИмяСвойства );
ЭталонЗначения.Добавить( ТипЗначенияJSON.Строка );
ЭталонЗначения.Добавить( ТипЗначенияJSON.КонецОбъекта );
// читаем последовательно строку json и собираем типы значений по порядку
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
ФактЗначения = Новый Массив;
Пока ЧтениеJSON.Прочитать() Цикл
ФактЗначения.Добавить( ЧтениеJSON.ТипТекущегоЗначения );
КонецЦикла;
ЧтениеJSON.Закрыть();
// проверяем что эталон и факт данные идентичны
Если ЭталонЗначения.Количество() <> ФактЗначения.Количество() Тогда
ВызватьИсключение "Разное количество эталонных и фактических данных";
КонецЕсли;
Для Сч = 0 По ЭталонЗначения.ВГраница() Цикл
Если ЭталонЗначения[Сч] <> ФактЗначения[Сч] Тогда
ВызватьИсключение СтрШаблон(
"Значения типов не равны, номер по порядку: %1, ожидали: %2, получили: %3",
Сч,
ЭталонЗначения[Сч],
ФактЗначения[Сч]
);
КонецЕсли;
КонецЦикла;
Ожидаемое поведение
ЧтениеJSON должен устанавливать свое свойство в значение ТипТекущегоЗначения.Строка и в свойстве ТекущееЗначение должна быть прочитанная строка значения свойства из json
В платформе 1С это работает корректно:
Окружение
- ОС: Windows
- Версия: 2.0.1
Дополнительная информация
Есть подозрение, что рантайм движка автоматически распознает в строках json дату в формате ISO и конвертирует ее в тип Дата,хотя его никто не просил и отключить это поведение никак нельзя. Эти подозрения вызваны наблюдением за тем как работает ПрочитатьJSON - оно такие строки конвертирует в Дата, хотя никакого указания так делать не было.
Вот код, демонстрирующий это. В платформе 1С он работает корректно - такая строка не преобразуется в Дата сама по себе. В onescript в свойстве lastSignInTime будет значение типа Дата, должно быть Строка
// проверяемая строка json
СтрокаJSON = "{ ""lastSignInTime"": ""2026-05-13T22:51:46Z"" }";
// читаем json в структуру
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(СтрокаJSON);
Объект = ПрочитатьJSON(ЧтениеJSON);
Ожидаем = Тип("Строка");
Факт = ТипЗнч( Объект.lastSignInTime );
Если Факт <> Ожидаем Тогда
ВызватьИсключение СтрШаблон(
"Типы отличаются, ожидали: %1, получили: %2",
Ожидаем,
Факт
);
КонецЕсли;
В комментариях к версии рантайма 1.0.21 упоминается такое изменение - Исправлена ошибка: в ЧтениеJSON не обрабатывались значения типа DateTime. Может быть связано с текущей ошибкой
Опишите ошибку
Есть объект для последовательного чтения json - ЧтениеJSON.
Когда значение свойства json это строка и эта строка содержит дату в формате ISO ("2026-05-13T22:51:46Z") - ЧтениеJSON вместо того чтобы определить тип такого значения как
ТипТекущегоЗначения.Строка- возвращаетТипТекущегоЗначения.Ничего. Соответственно и значение получить не получается т.к. при типеТипТекущегоЗначения.Ничегообращение кТекущееЗначениегенерирует исключение.Другими словами значение такого свойства просто невозможно получить
Воспроизведение ошибки
Steps to reproduce the behavior:
Вот тест, демонстрирующий это поведение.
Для json вида
{ "lastSignInTime"": ""2026-05-13T22:51:46Z" }ожидаем, что при чтении объектом ЧтениеJSON типы будут такие:НачалоОбъекта - ИмяСвойства - Строка - КонецОбъектаФактически получаем:
НачалоОбъекта - ИмяСвойства - Ничего - КонецОбъектаОжидаемое поведение
ЧтениеJSON должен устанавливать свое свойство в значение ТипТекущегоЗначения.Строка и в свойстве ТекущееЗначение должна быть прочитанная строка значения свойства из json
В платформе 1С это работает корректно:
Окружение
Дополнительная информация
Есть подозрение, что рантайм движка автоматически распознает в строках json дату в формате ISO и конвертирует ее в тип Дата,хотя его никто не просил и отключить это поведение никак нельзя. Эти подозрения вызваны наблюдением за тем как работает ПрочитатьJSON - оно такие строки конвертирует в Дата, хотя никакого указания так делать не было.
Вот код, демонстрирующий это. В платформе 1С он работает корректно - такая строка не преобразуется в Дата сама по себе. В onescript в свойстве lastSignInTime будет значение типа Дата, должно быть Строка
В комментариях к версии рантайма 1.0.21 упоминается такое изменение - Исправлена ошибка: в ЧтениеJSON не обрабатывались значения типа DateTime. Может быть связано с текущей ошибкой