|
Функция ПрочитатьJSON молча выбрасывает кусок строки |
☑ |
0
TormozIT
гуру
19.08.22
✎
19:43
|
Выполняю в консоли кода
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку("45 34534керапрапр");
Результат1 = ПрочитатьJSON(ЧтениеJSON);
Сообщить(Результат1);
Результат2 = ФабрикаXDTO.ПрочитатьJSON(ЧтениеJSON);
Получаю сообщения
45
Строка кода 5: Ошибка при вызове метода контекста (ПрочитатьJSON): Непредвиденный символ при чтении JSON
Получается глобальная функция ПрочитатьJSON молча выбрасывает кусок строки в то время, как фабричная функция ожидаемо выбрасывает исключение.
1. Это нормально?
Если да, то
2. Зачем так сделано?
3. Как убедиться что все было прочитано?
|
|
1
alarm2020
19.08.22
✎
19:53
|
Если результат - структура, то все прочитано, иначе это не json
|
|
2
TormozIT
гуру
19.08.22
✎
19:54
|
Еще в описании глобального метода указано
"JSON-текст должен быть корректным."
Получается этот текст он считает корректным?
|
|
3
TormozIT
гуру
19.08.22
✎
19:56
|
(1) Нет. Глобальный метод ПрочитатьJSON() может вернуть
- число
- дата
- строка
- булево
- массив
- структура
Например
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку("true");
Результат1 = ПрочитатьJSON(ЧтениеJSON);
Сообщить(Результат1);
выведет
Да
|
|
4
TormozIT
гуру
19.08.22
✎
19:58
|
(3) ну и Неопределено еще может вернуть конечно
|
|
5
TormozIT
гуру
19.08.22
✎
20:07
|
В (0) некорректный тест в отношении фабричного метода. Но сути это не меняет.
Вот исправленный тест
Строка = "45 34534керапрапр";
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Строка);
Результат1 = ПрочитатьJSON(ЧтениеJSON);
Сообщить(1);
ЧтениеJSON.УстановитьСтроку(Строка);
Результат2 = ФабрикаXDTO.ПрочитатьJSON(ЧтениеJSON);
|
|
6
TormozIT
гуру
19.08.22
✎
20:14
|
3. Как убедиться что все было прочитано?
Нашел такой способ - ЧтениеJSON.ТекущаяПозиция = СтрДлина(Строка)
Строка = "[null] 435";
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Строка);
Результат1 = ПрочитатьJSON(ЧтениеJSON);
ВсеПрочитано = ЧтениеJSON.ТекущаяПозиция = СтрДлина(Строка);
Сообщить(ВсеПрочитано);
|
|
7
TormozIT
гуру
19.08.22
✎
20:25
|
1. Это нормально?
Ответ: Да
2. Зачем так сделано?
Ответ: Это аналог метода ПрочитатьXML. Поэтому он читает текущее значение/объект из потока чтения, а не весь поток до конца как я ошибочно полагал.
|
|
8
alarm2020
19.08.22
✎
20:41
|
И все-таки. Если результат структура или массив - это JSON в общепризнанном смысле. Если нет - не JSON. Я считаю, что правильнее будет ориентироваться на общепризнанное, а не на интерпретацию от 1С.
|
|
9
ДедМорроз
20.08.22
✎
06:11
|
Нет,а что вы хотите.
Вы пихаете ему на вход неизвестно что,поэтому метод делает то,что умеет.
Просто,число состоит только из цифр и дополнительный знаков .e
Строка пишется в кавычках(по стандарту в двойных,но парсер,обычно,понимает и одинарные)
Далее,есть функция преобразования строки в число в 1с - она тоже странно работает,так как отбрасывает символы,что в вашем случае и происходит.
|
|