0
Отвечен

JSON parse error

Анонимный 5 лет назад обновлен Антон 4 года назад 8
Добрый день!
Тестирую команду /api/v2/clean/address. Отправляю json вида:
{"structure":["ADDRESS"], "data":[["Москва, Милютинский 13"]]}
В ответ мне приходит ошибка:
{"detail": "JSON parse error - No JSON object could be decoded"}
Подскажите, пожалуйста, ЧЯДНТ?
Добрый день, вы не указываете Content Type

В запросе должны быть следующие заголовки
curl -X POST \
-H "Content-Type: application/json" \
-H "Accept: application/json" \
-H "Authorization: Token ${API_KEY}" \
-d '{ "query": "Хабар" }' \

https://dadata.ru/api/clean/
Добрый день!
В заголовках все это указываю.
Тогда пришлите полный запрос, пожалуйста.
Только API ключ свой из него уберите :)
Язык 1С:

ЗаголовокHTTP = Новый Соответствие();
ЗаголовокHTTP.Вставить("Content-Type", "application/json");
ЗаголовокHTTP.Вставить("Accept", "application/json");
ЗаголовокHTTP.Вставить("Authorization", "Token 3...e");
ЗаголовокHTTP.Вставить("X-Secret", "0...e");

НТТР = Новый HTTPСоединение("dadata.ru",,,,,10);

ЗапросHTTP = Новый HTTPЗапрос("/api/v2/clean/address", ЗаголовокHTTP);
ЗапросHTTP.УстановитьТелоИзСтроки("{""structure"": [""ADDRESS""], ""data"": [[""Москва, Милютинский 13""]]}");
Разобрался сам. Надо было записать текстовый файл в кодировке ANSI, и его подставить в запрос
Не нужно использовать файл. Собачка порылась в наличии BOM по умолчанию в строках UTF-8. Для корректной работы с dadata нужно указывать параметр ИспользованиеByteOrderMark.НеИспользовать.



АдресИсходный = "Москва, Милютинский 13";

HTTPЗапрос = Новый HTTPЗапрос();
HTTPЗапрос.АдресРесурса = "/api/v2/clean/address";
HTTPЗапрос.Заголовки.Вставить("Content-Type", "application/json");
HTTPЗапрос.Заголовки.Вставить("Authorization", "Token f...5");
HTTPЗапрос.Заголовки.Вставить("X-Secret", "f...0");
АдресИсходный = "[ """ + АдресИсходный + """ ]";
HTTPЗапрос.УстановитьТелоИзСтроки(АдресИсходный, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать);
Соединение = Новый HTTPСоединение("dadata.ru",,,,Новый ИнтернетПрокси,, Новый ЗащищенноеСоединениеOpenSSL);
ОтветHTTP = Соединение.ОтправитьДляОбработки(HTTPЗапрос);
Тело = ОтветHTTP.ПолучитьТелоКакСтроку();
Игорь, спасибо за дополнение!

Сервис поддержки клиентов работает на платформе UserEcho