При разработке очередного обмена с интернет магазином через API столкнулисть что сайт возвращает ответ в виде:
{"ok":"true","description":"\u0421\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u043a\u0430\u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d"}
из кода ясно что это JSON и используя код ПрочитатьJSON
Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(стрВходящая); ДанныеЛога = ПрочитатьJSON(Чтение); Чтение.Закрыть();
В переменной ДанныеЛога будет структура в виде
В результате получилась функция с 2-мя вариантами возрата, в зависимости от того как нужно
//Функция читает полученный JSON декадируя текст юникод Функция ДекодироватьUniCodeВJSON(стрВходящая) // стрВходящая содержит {"ok":"true","description":"\u0421\u0442\u0430\u0442\u0443\u0441 \u0437\u0430\u043a\u0430\u0437\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d"} Чтение = Новый ЧтениеJSON; Чтение.УстановитьСтроку(стрВходящая); ДанныеЛога = ПрочитатьJSON(Чтение); Чтение.Закрыть(); // Вариант 1 используя перебор структуры и вывод в текстовую переменную Текст = ""; Для каждого Элемент Из ДанныеЛога Цикл //добавим разделитель после предыдущего значения Текст = Текст + ?(НЕ ПустаяСтрока(Текст), Символы.ПС, ""); //добавим представление ключа и значения: Текст = Текст + Элемент.Ключ + " = " + Элемент.Значение; КонецЦикла; Возврат Текст; //Вернет ok = true description = Статус заказа изменен // Вариант 2 мспользуя ЗаписьJSON Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет)); ЗаписатьJSON(Запись, ДанныеЛога,); Возврат Запись.Закрыть(); // Вернет JSON {"ok":"true","description":"Статус заказа изменен"} КонецФункции
На просторах интернета была найдена еще одна функция:
//Параметры: Строка в Юникод (обязательный) Тип: Строка. Исходная строка. //Возвращаемое значение: Тип: Строка. Строка обработанных символов. //Описание: Возвращает преобразованную строку из формата Unicod. //Автор: Александр Кияница (treedo) Функция ПереобразоватьЮникод(Строка) ГотововаяСтрока = "" ; МасУкр = Новый Массив(66) ; МасУкр[0]="А"; МасУкр[1]="Б"; МасУкр[2]="В"; МасУкр[3]="Г"; МасУкр[4]="Ґ"; МасУкр[5]="Д"; МасУкр[6]="Е"; МасУкр[7]="Є"; МасУкр[8]="Ж"; МасУкр[9]="З"; МасУкр[10]="И"; МасУкр[11]="І"; МасУкр[12]="Ї"; МасУкр[13]="Й"; МасУкр[14]="К"; МасУкр[15]="Л"; МасУкр[16]="М"; МасУкр[17]="Н"; МасУкр[18]="О"; МасУкр[19]="П"; МасУкр[20]="Р"; МасУкр[21]="С"; МасУкр[22]="Т"; МасУкр[23]="У"; МасУкр[24]="Ф"; МасУкр[25]="Х"; МасУкр[26]="Ц"; МасУкр[27]="Ч"; МасУкр[28]="Ш"; МасУкр[29]="Щ"; МасУкр[30]="Ь"; МасУкр[31]="Ю"; МасУкр[32]="Я"; МасУкр[33]="а"; МасУкр[34]="б"; МасУкр[35]="в"; МасУкр[36]="г"; МасУкр[37]="ґ"; МасУкр[38]="д"; МасУкр[39]="е"; МасУкр[40]="є"; МасУкр[41]="ж"; МасУкр[42]="з"; МасУкр[43]="и"; МасУкр[44]="і"; МасУкр[45]="ї"; МасУкр[46]="й"; МасУкр[47]="к"; МасУкр[48]="л"; МасУкр[49]="м"; МасУкр[50]="н"; МасУкр[51]="о"; МасУкр[52]="п"; МасУкр[53]="р"; МасУкр[54]="с"; МасУкр[55]="т"; МасУкр[56]="у"; МасУкр[57]="ф"; МасУкр[58]="х"; МасУкр[59]="ц"; МасУкр[60]="ч"; МасУкр[61]="ш"; МасУкр[62]="щ"; МасУкр[63]="ь"; МасУкр[31]="ю"; МасУкр[65]="я"; МасКод = Новый Массив(66) ; МасКод[0]="0410"; МасКод[1]="0411"; МасКод[2]="0412"; МасКод[3]="0413"; МасКод[4]="0490"; МасКод[5]="0414"; МасКод[6]="0415"; МасКод[7]="0404"; МасКод[8]="0416"; МасКод[9]="0417"; МасКод[10]="0418"; МасКод[11]="0406"; МасКод[12]="0407"; МасКод[13]="0419"; МасКод[14]="041A"; МасКод[15]="041B"; МасКод[16]="041C"; МасКод[17]="041D"; МасКод[18]="041E"; МасКод[19]="041F"; МасКод[20]="0420"; МасКод[21]="0421"; МасКод[22]="0422"; МасКод[23]="0423"; МасКод[24]="0424"; МасКод[25]="0425"; МасКод[26]="0426"; МасКод[27]="0427"; МасКод[28]="0428"; МасКод[29]="0429"; МасКод[30]="042C"; МасКод[31]="042E"; МасКод[32]="042F"; МасКод[33]="0430"; МасКод[34]="0431"; МасКод[35]="0432"; МасКод[36]="0413"; МасКод[37]="0491"; МасКод[38]="0434"; МасКод[39]="0435"; МасКод[40]="0454"; МасКод[41]="0436"; МасКод[42]="0437"; МасКод[43]="0438"; МасКод[44]="0456"; МасКод[45]="0457"; МасКод[46]="0439"; МасКод[47]="043A"; МасКод[48]="043B"; МасКод[49]="043C"; МасКод[50]="043D"; МасКод[51]="043E"; МасКод[52]="043F"; МасКод[53]="0440"; МасКод[54]="0441"; МасКод[55]="0442"; МасКод[56]="0443"; МасКод[57]="0444"; МасКод[58]="0445"; МасКод[59]="0446"; МасКод[60]="0447"; МасКод[61]="0448"; МасКод[62]="0449"; МасКод[63]="044C"; МасКод[31]="044E"; МасКод[65]="044F"; тмпСтрока = "" ; Для Счетчик = 1 По СтрДлина(Строка) Цикл Если Лев(Строка, 1) = "\" Тогда Если Лев(Строка, 2) = "\u" Тогда тмпСтрока = Прав(Лев(Строка, 6),4) ; Если МасКод.Найти(тмпСтрока) = Неопределено Тогда СтрокаЗамены = Прав(тмпСтрока, 1) ; тмпСтрока = СтрЗаменить(тмпСтрока,СтрокаЗамены,ТРег(СтрокаЗамены)); Если МасКод.Найти(тмпСтрока) = Неопределено Тогда Сообщить("Код символа не найден: " + тмпСтрока) ; Иначе ГотововаяСтрока = ГотововаяСтрока + МасУкр[МасКод.Найти(тмпСтрока)] ; КонецЕсли; Иначе ГотововаяСтрока = ГотововаяСтрока + МасУкр[МасКод.Найти(тмпСтрока)] ; КонецЕсли; Строка = Прав(Строка, (СтрДлина(Строка)-6)) ; Иначе Строка = Прав(Строка, (СтрДлина(Строка)-2)) ; КонецЕсли; Иначе ГотововаяСтрока = ГотововаяСтрока + Лев(Строка, 1) ; Строка = Прав(Строка, (СтрДлина(Строка)-1)) ; КонецЕсли; КонецЦикла; Возврат ГотововаяСтрока ; КонецФункции
Функция ПолучитьТаблицуКурсовНБУ(ДатаКурса, Ежедневно = 1) // если в качестве второго параметра указать число отличное от 1 - получем валюты, которые котируются на ежемесячной основе Перем Reader, Url, Точки, HtmlTab, Строк, Р, НомСтроки, НомЯчейки, Док, ТекстВЯчейке, ТабКурсов; Url = "http://www.bank.gov.ua/control/uk/curmetal/currency/search?formType=searchFormDate&time_step=" + ?(Ежедневно = 1, "daily", "monthly") + "&date=" + Формат(ДатаКурса, "ДДДММГГГГ") + "&outer=table&execute=run&time=" + _GetPerformanceCounter(); Сообщить(Url); Reader = СоздатьОбъект("MSXML2.XMLHTTP"); Reader.Open("Get", Url, 0); Reader.Send(); Пока Reader.ReadyState <> 4 Цикл Состояние("Чтение данных за <" + ДатаКурса + "> "); КонецЦикла; Док = СоздатьОбъект("HtmlFile"); Док.open("text/html"); Док.write(Reader.ResponseText); Док.close(); HtmlTab = Док.getElementsByTagName("table").item(5); ТабКурсов = СоздатьОбъект("ТаблицаЗначений"); ТабКурсов.НоваяКолонка("ЦифрКод" , "Строка", 3, , "Цифр. код"); ТабКурсов.НоваяКолонка("БуквКод" , "Строка", 3, , "Букв. код"); ТабКурсов.НоваяКолонка("Название" , "Строка"); ТабКурсов.НоваяКолонка("Курс" , "Число" ,14, 4); ТабКурсов.НоваяКолонка("Кратность" , "Число" , 9, 0); Строк = HtmlTab.rows.length; Для НомСтроки = 1 По Строк Цикл Р = HtmlTab.rows(НомСтроки - 1); Если (НомСтроки = 1) Или (Р.cells.length <> 5) Тогда // 1 - я заголовок, остальные не с данными Продолжить; КонецЕсли; ТабКурсов.НоваяСтрока(); ТабКурсов.ЦифрКод = СокрЛП(Р.cells(0).innerText); ТабКурсов.БуквКод = СокрЛП(Р.cells(1).innerText); ТабКурсов.Название = СокрЛП(Р.cells(3).innerText); ТабКурсов.Курс = 0 + СтрЗаменить(СокрЛП(Р.cells(4).innerText), " ", ""); ТабКурсов.Кратность = 0 + СтрЗаменить(СокрЛП(Р.cells(2).innerText), " ", ""); КонецЦикла; Reader = 0; ТабКурсов.ВыбратьСтроку(, "Курсы за " + ДатаКурса); Возврат ТабКурсов; КонецФункции