Имя: Пароль:
1C
1С v8
1С, JSON и кодировка
0 alekseevaSG
 
27.08.19
15:01
Добрый день, есть ошибка с кодировкой при получении JSON от сайта.
Не особо много работала с JSON, поэтому могла упустить что-то элементарное. Пробую хотя бы просто получить данные в адекватном виде.
Собственно, подробности:

Я получаю json от сайта через api, указав кодировку utf-8 при получении:
    Попытка        
        Ответ = Соединение.ВызватьHTTPМетод(МетодЗапроса, HTTPЗапрос);
        Сообщить("Код ответа: " + Ответ.КодСостояния);
        Сообщить("Ответ: " + Ответ.ПолучитьТелоКакСтроку("UTF-8"));    

    Исключение        
        Сообщить("Ошибка выполнения запроса!" + Символы.ПС + ОписаниеОшибки());        
        
    КонецПопытки;
    
    ЧтениеJSON = Новый ЧтениеJSON();
    ЧтениеJSON.УстановитьСтроку(Ответ.ПолучитьТелоКакСтроку("UTF-8"));
    Данные = ПрочитатьJSON(ЧтениеJSON);    
    Сообщить(Данные);



Но вот что получаю:
"Кусок" ответа: {"message":"","result":[{"id":"954434","title":"\u041a\u043e\u0440\u043e\u0431\u043a\u0438 \u0441\u043e \u0441\u0442\u0435\u043a\u043b\u043e\u043c","description":"\u0422\u0440\u0438 \u043a\u043e\u0440\u043e\u0431\u043a\u0438 \u0441 \u0432\u0438\u043d\u043e\u043c","origin":"\u0413\u0435\u043b\u0435\u043d\u0434\u0436\u0438\u043a, \u041a\u0440\u0430\u0441\u043d\u043e\u0434\u0430\u0440\u0441\u043a\u0438\u0439 \u043a\u0440\u0430\u0439, \u0420\u043e\u0441\u0441\u0438\u044f"....... - и так далее и тому подобное

Кстати похожий код использовала для другого сайта, но там получала данные в "понятном" русском виде :D

Из нагугленного то, что сработало - это вот этот кусочек кода:
Пока ЧтениеJSON.Прочитать() Цикл
        Попытка
           Сообщить("Параметр "+ЧтениеJSON.ТекущееЗначение);
       Исключение            
        КонецПопытки    
КонецЦикла;

Но тут каждый параметр выводится отдельно, а если ещё и объём json очень большой, то это совсем неудобно.

Может, есть кто работал с похожей задачей и даст подсказку...
1 Fragster
 
гуру
27.08.19
15:04
все правильно, не надо сообщать "ответ", надо сообщать Данные.result[0].title, например. в jsoт у тебя буквы закодированы json последовательностью, после ПрочитатьJSON в Данные все нормально будет.
2 yavasya
 
27.08.19
15:09
(0)      ЧтениеJSON=Новый ЧтениеJSON;
    ЧтениеJSON.УстановитьСтроку(ТекстJSON);
    ЧтениеJSON.Прочитать();
    Фабрика=Новый ФабрикаXDTO;
    ДанныеJSON=Фабрика.ПрочитатьJSON(ЧтениеJSON);
3 alekseevaSG
 
27.08.19
15:53
(1) Т.е. к примеру
    Сообщить(Данные.result[0].title); ?
Да, так данные вполне корректны.

А если массив достаточно большой, обходить через цикл со счетчиком?
4 3achem
 
27.08.19
15:55
(3) Для каждого
Забудьте о циклах со счётчиками
5 alekseevaSG
 
27.08.19
15:56
(2) Ошибка при вызове метода контекста (ПрочитатьJSON)
Что-то 1С на это ругается
6 alekseevaSG
 
27.08.19
15:57
(4) Хорошо, попробую :D
7 3achem
 
27.08.19
16:01
(5) Версия платформы?
8 3achem
 
27.08.19
16:03
(5)

ЧтениеJSON = Новый ЧтениеJSON;
СтрокаЧтения = HTTPОтвет.ПолучитьТелоКакСтроку();
ЧтениеJSON.УстановитьСтроку(СтрокаЧтения);
ТелоОтвета = ПрочитатьJSON(ЧтениеJSON);
9 alekseevaSG
 
27.08.19
16:05
(7) 8.3.12
10 mikecool
 
27.08.19
16:33
8.3.12.1714
такая же фигня в ответе, но на просмотр - данные в 1С читаются нормально
11 timurhv
 
27.08.19
17:26
ПрочитатьJSON(ЧтениеJSON, Истина);
12 bootini
 
27.08.19
17:27
так в структуру читал:

        ЧтениеJSON = Новый ЧтениеJSON();
        ЧтениеJSON.ОткрытьПоток(HTTPОтвет.ПолучитьТелоКакПоток());
        Попытка
            СтруктураОтвета = ПрочитатьJSON(ЧтениеJSON, Ложь);
        Исключение
  
        КонецПопытки;
13 timurhv
 
27.08.19
17:31
(12) Я по json не спец, в первый раз пишу, начал типовые ковырять. Если ложь вторым параметром, то кодировка не работает, если Истина - сразу все в норму приходит.