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