Имя: Пароль:
1C
 
Как сделать ЧтениеJSON без преобразования unicod?
0 vi0
 
17.12.18
10:32
Как сделать ЧтениеJSON без преобразования unicod?

Например, чтобы при выполнении следующего кода, в считанной переменной Соответствие1 текст оставался как и был без преобразования в символы?

//Пример строки с юникодом
//{"NAME":"\u0421\u043a\u0438\u0434\u043a\u0430 \u043e\u0442 \u043c\u0435\u043d\u0435\u0434\u0436\u0435\u0440\u0430 \u041f\u041f - 5%","COUPON":"SL-4IFEJ-S4LCPZB"}

ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(Текст1);
Соответствие1 = ПрочитатьJSON(ЧтениеJSON, Истина);
1 Сияющий в темноте
 
17.12.18
13:17
Согласно правилу json,последовательность /uXXXX указывает код символа.Парсер его в символ и переводит,а вы что хотите?
Написать свой парсер json проще простого,ведь в 1с есть обьект соответствие.
2 ptiz
 
17.12.18
13:18
(0) Например, заменить "\u" на свою хрень, а после чтения - обратно.
3 vi0
 
17.12.18
16:47
написать самому и костылить - не предлагать
4 Fragster
 
гуру
17.12.18
16:49
а чем тебе не нравится "Скидка от менеджера ПП - 5%"?
5 Сияющий в темноте
 
17.12.18
16:55
Тогда никак
6 vi0
 
17.12.18
17:20
(4) да это пример
просто бывают нечитабельные символы типа \u0000, которые провоцируют разные ошибки
7 Fragster
 
гуру
17.12.18
17:51
(6) а зачем ты тогда пример такой неудачный приводишь? мне вот интересно, какой сервис выдает тебе результат с такими символами?
8 palsergeich
 
17.12.18
17:55
(6)
1) Настроить систем логирования сервера.
2) Исключительны последовательности - хранить.
3) Перед преобразованием JSON тупым стр заменить удалять исключительные символы.
Количество необрабатываемых символов конечно и не велико.
9 vi0
 
17.12.18
18:09
(8) третий вариант, конечно, тот еще гордиев узел
а про 1 и 2 можно поподробнее?
10 palsergeich
 
17.12.18
19:34
(9) 1) Нужно выявить факт возникновения ошибочной ситуации на обмене.
2) Десериализация заворачивается в попытку исключение и текст сообщения и ошибки пишется в отдельный лог (Отдельный лог файл или БД), можно и в ЖР, но мне этот вариант не нравится.
3) По итогам работы проводится анализ ошибок - что именно привело к падению - данные символы заносятся в некий словарь исключений - что из JSON надо изъять для корректной работы.
4) СТРЗаменить работает очень быстро, как правило это служебные символы, случайно попавшие в сообщение. На практике пока видел таких всего 3.
11 palsergeich
 
17.12.18
19:37
а хранить юникод последовательности вместо символов - просто на ровном месте увеличить хранимые данные в 8 раз.
12 Сияющий в темноте
 
17.12.18
21:53
Символ ноль в середине строки допустим только для Bstr,а в javascript такого быть не должно.
Опять же,в 1с ноль-это конец строки и будет проблема,но json тут каким боком виноват,если вы массивы байт в строку пишете?
13 zva
 
18.12.18
05:37
(6) У меня так сделано:

СтрокаОтвета = УбратьНедопустимыеСимволы(HTTPОтвет.ПолучитьТелоКакСтроку());
ЧтениеJSON = Новый ЧтениеJSON();
ЧтениеJSON.УстановитьСтроку(СтрокаОтвета);


Функция УбратьНедопустимыеСимволы(ИсходнаяСтрока)
    
    Позиция = НайтиНедопустимыеСимволыXML(ИсходнаяСтрока);
    
    Пока Позиция <> 0 Цикл
        ИсходнаяСтрока = Лев(ИсходнаяСтрока, Позиция - 1) + Сред(ИсходнаяСтрока, Позиция + 1);
        Позиция = НайтиНедопустимыеСимволыXML(ИсходнаяСтрока);
    КонецЦикла;
    
    Возврат ИсходнаяСтрока;
    
КонецФункции
14 vi0
 
18.12.18
06:29
(10) ошибка происходит не при десериализации, а, например, при передачи строки с сервера на клиент
Пользователь не знает, чего он хочет, пока не увидит то, что он получил. Эдвард Йодан