|
Функция Прочитать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с - она тоже странно работает,так как отбрасывает символы,что в вашем случае и происходит. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |