Неправильно работает ЧтениеJSON.Пропустить()
Опишите ошибку Неправильно работает ЧтениеJSON.Пропустить()
Воспроизведение ошибки
- Для простых значений:
Текст = "1,2,3,4,5";
Чтение = Новый ЧтениеJSON();
Чтение.УстановитьСтроку(Текст);
Результат = Чтение.Прочитать(); // считывает 1
Результат = Чтение.Пропустить(); // должно прочитать 2
Сообщить(Чтение.ТекущееЗначение));
Вывод: 3 Ожидаемое поведение Вывод: 2
- Для вложенных массивов:
Текст = "1,[2,[-1,-2],[-3,-4],3],4,5";
Чтение = Новый ЧтениеJSON();
Чтение.УстановитьСтроку(Текст);
Результат = Чтение.Прочитать(); // считывает 1
Результат = Чтение.Прочитать(); // считывает НачалоМассива
Результат = Чтение.Пропустить(); // должно пропустить масиив от '[2,' до ',3]' и считать 4; фактически: НачалоМассива '[-3,'
Результат = Чтение.Прочитать(); // должно прочитать 5,
Сообщить(Чтение.ТекущееЗначение));
Вывод: -3 Ожидаемое поведение Вывод: 5
Аналогично для вложенных объектов.
Окружение
- Версия: latest, develop
Дополнительная информация
Оказалось, что 1С может пропускать некорректные конструкции:
Текст = "1,[2, } } { { [-1,-2], { { [-3,-4], 3], 4, 5, 6";
Чтение = Новый ЧтениеJSON();
Чтение.УстановитьСтроку(Текст);
Результат = Чтение.Прочитать(); // считывает 1
Результат = Чтение.Прочитать(); // считывает НачалоМассива
Результат = Чтение.Пропустить(); // пропускает массив от '[2,' до ',3]', несмотря на ошибки внутри
Сообщить(Чтение.ТекущееЗначение)); // 4
Newtonsoft-ский JsonReader на такое реагирует исключением. Не стоит повторять, баг в 1С?
Давай сделаем, как проще. Мне сложно сказать, кто тут прав
Обнаружено несоответствие в поведении ТекущаяПозиция() после чтения значений:
Текст = "1 , 2";
Чтение = Новый ЧтениеJSON();
Чтение.УстановитьСтроку(Текст);
Чтение.Прочитать();
Позиция = Чтение.ТекущаяПозиция
В OneScript Позиция = 1 - после значения, в 1С Позиция = 5 - после разделителя, несмотря на описание:
Указывает на позицию, находящуюся сразу после прочитанного значения.
Стоит ли заводить issue? Так придем к отказу от Newtonsoft.Json
Для net6 он и так задепрекейчен в пользу родного, так что не очень страшно, если это поможет. С другой стороны, "Позиция" это не та функиональнность, без которой прям жить нельзя. Полагаю, на твое усмотрение.
Уже смотрел в сторону родного (System.Text.Json). Там тоже есть проблемы, например:
Allow single quotes around string values ❌ Not supported by design
Это по стандарту, но несовместимо с 1С, которая такое позволяет.