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