Вход | Регистрация

1С:Предприятие :: 1С:Предприятие 8 общая

JSON и 1с8.3 "Неправильный формат данных в запросе"

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) Попробовал, тоже самое.

Список тем форума
Рекламное место пустует  Рекламное место пустует
Миста — веселый ресурс со своими эксклюзивными тараканами Ymryn
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.
Тема не обновлялась длительное время, и была помечена как архивная. Добавление сообщений невозможно.
Но вы можете создать новую ветку и вам обязательно ответят!
Каждый час на Волшебном форуме бывает более 2000 человек.
Рекламное место пустует