|
JSON и 1с8.3 "Неправильный формат данных в запросе"
|
Я
|
|
dabuldakov 02.11.16 - 06:36 | Добрый день! Помогите разобраться. Никак не могу понять из-за чего сервер не принимает запрос.
Такие условия:
Внимание! При отправке запроса в формате JSON перед {} необходимо добавить “data=”. Названия и значения параметров должны быть заключены в двойные кавычки, как в примере выше.
Пример запроса из ТЗ:
data = {
"auth_key": "910c29400ebfed8c3baab93",
"method": "getStoragesList"
}
Мой код:
Данные = Новый Структура("auth_key, method", "910c29400ebfed8c3baab935f", "getStoragesList");
ЗаписьJSON = Новый ЗаписьJSON;
//ЗаписьJSON.ПроверятьСтруктуру = Ложь;
ПараметрыЗаписиJSON = Новый ПараметрыЗаписиJSON(ПереносСтрокJSON.Нет, "");
ЗаписьJSON.УстановитьСтроку(ПараметрыЗаписиJSON);
ЗаписатьJSON(ЗаписьJSON, Данные);
СтрокаJSON = ЗаписьJSON.Закрыть();
СтрокаJSON = "data=" + СтрокаJSON;
ssl = Новый ЗащищенноеСоединениеOpenSSL();
HTTPСоединение = Новый HTTPСоединение("api2.test.su/?json",,,,,5,ssl);
HTTPЗапрос = Новый HTTPЗапрос();
HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.ANSI, ИспользованиеByteOrderMark.НеИспользовать);
Результат2 = HTTPСоединение.ОтправитьДляОбработки(HTTPЗапрос);
РезультатОтвет2 = Результат2.ПолучитьТелоКакСтроку(КодировкаТекста.ANSI);
ЧтениеJSON = Новый ЧтениеJSON;
ЧтениеJSON.УстановитьСтроку(РезультатОтвет2);
Пока ЧтениеJSON.Прочитать() Цикл
ТипJSON = ЧтениеJSON.ТипТекущегоЗначения;
Если ТипJSON = ТипЗначенияJSON.Строка ИЛИ ТипJSON = ТипЗначенияJSON.Число Тогда
Сообщить(ЧтениеJSON.ТекущееЗначение);
КонецЕсли;
КонецЦикла;
Возвращает: 200 - что соединение удалось с сервером, а вот формат запроса не верный. Проверял строку в веб сервисе без "data=" все ок. Пробывал разные кодировки, разные параметры JSON с символами и без. |
dabuldakov 1 - 02.11.16 - 06:57 | "Неверный формат данных в запросе." Конкретный текст ответа сервера.
|
zva 2 - 02.11.16 - 07:20 | "Названия и значения параметров должны быть заключены в двойные кавычки, как в примере выше." - Это не есть формат Json.
Метод ЗаписатьJSON() не будет значения с типом число, массив и т.д. заключать в кавычки, нужно все руками собирать...
|
DrZombi 3 - 02.11.16 - 07:49 | ( 0) 1С криво считывает JSON формат, который был сгенерирован не 1С. :) |
dabuldakov 4 - 02.11.16 - 08:01 | 1) Вот что получается на выходе Метод ЗаписатьJSON()
"data={"auth_key":"123abc","method":"getStoragesList"}"
2) Вот что я собрал с Символ(34) "data={"auth_key":"123abc","method":"getStoragesList"}" |
zva 5 - 02.11.16 - 08:54 | (4) Если впереди непонятный символ, то скорей всего BOM
Можно попробовать HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, "CESU-8"); |
dabuldakov 6 - 02.11.16 - 09:40 | ( 5) Пробывал, сейчас еще раз попробывал. Тоже самое. |
Сниф 7 - 02.11.16 - 10:05 | СтрокаJSON = "data={auth_key:123abc,method:getStoragesList}" ;
А если так? Без внутренних кавычек. |
dabuldakov 8 - 02.11.16 - 11:50 | ( 7) Попробовал, тоже самое. |
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать
новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более
2000 человек.