|
Передача параметра в JSON-запрос | ☑ | ||
---|---|---|---|---|
0
lonely_ferret
13.09.23
✎
15:43
|
Здравствуйте. Подскажите, как записать переменную в json-запрос? Я вычисляю код аутентификации в отдельной функции, затем передаю ее в запрос, но у меня возникает ошибка {"jsonrpc":"2.0","error":{"code":-32700,"message":"Parse error","data":"Invalid JSON. An error occurred on the server while parsing the JSON text."},"id":null}. Код исполняемой процедуры привожу ниже.
Аутентификация = Аутентификация(ПК, Доступ); Аид = Лев(Прав(Аутентификация, 41), 32); HTTPСоединение = Новый HTTPСоединение("zabbix.spbstu.ru", , , , , , Новый ЗащищенноеСоединениеOpenSSL); СтрокаJSON = "{ | ""jsonrpc"":""2.0"", | ""method"":""host.get"", | ""params"":{ | ""output"": [""hostid"", ""host""], | ""selectInterfaces"": [ | ""interfaceid"", ""ip"" | ] | } | }, | ""id"": 2, | ""auth"": Аид | }"; HTTPЗапрос = Новый HTTPЗапрос("/api_jsonrpc.php"); HTTPЗапрос.Заголовки.Вставить("Content-type", "application/json-rpc; charset=utf-8"); HTTPЗапрос.УстановитьТелоИзСтроки(СтрокаJSON, КодировкаТекста.UTF8, ИспользованиеByteOrderMark.НеИспользовать); Ответ = HTTPСоединение.Получить(HTTPЗапрос); Тело = Ответ.ПолучитьТелоКакСтроку(); |
|||
1
Галахад
гуру
13.09.23
✎
15:46
|
Скобочка лишняя.
|
|||
2
Tatitutu
13.09.23
✎
15:47
|
Сегодня 13.09.23 День Программиста
"А"+"В"="АВ"; |
|||
3
azernot
13.09.23
✎
15:50
|
(0) Предположительно, надо удалить 9-ю строку СтрокаJSON:
| } |
|||
4
Tatitutu
13.09.23
✎
15:55
|
jSON !!!
СтрокаJSON - не правильно сформирована СтрокаJSON = "{ | ""jsonrpc"":""2.0"", | ""method"":""host.get"", | ""params"":{ | ""output"": [""hostid"", ""host""], | ""selectInterfaces"": [ | ""interfaceid"", ""ip"" | ] | } | }, | ""id"": 2, | ""auth"": "+Аид+" | }"; АИД передается как текст в РУССКОЙ РАССКЛАДКЕ , а не как ЗНАЧЕНИЕ |
|||
5
lonely_ferret
13.09.23
✎
15:58
|
(4) Боже, да, это же строка... Спасибо
|
|||
6
lonely_ferret
13.09.23
✎
16:04
|
Убрала лишнюю скобку и поправила строку. Ошибка осталась та же. В чем может быть проблема? Извините, пожалуйста, не ругайтесь, я ранее с данной технологией не работала, а документация Zabbix API не очень помогла.
|
|||
7
Галахад
гуру
13.09.23
✎
16:11
|
Валидность можно проверить например тут: https://jsonlint.com/
|
|||
8
azernot
13.09.23
✎
16:13
|
(6) >Ошибка осталась та же
Прям та же? А может всё же что-то в ней поменялось? Если та же, то вы запускаете старый вариант |
|||
9
azernot
13.09.23
✎
16:15
|
Сделайте
Сообщить(СтрокаJSON) перед вызовом Ответ = HTTPСоединение.Получить(HTTPЗапрос); И проверьте валидатором свой JSON |
|||
10
azernot
13.09.23
✎
16:17
|
Да, и ещё
Если Аид - строка, то надо в кавычки её ""auth"": """+Аид+""" |
|||
11
lonely_ferret
13.09.23
✎
16:19
|
(10) Да, ошибка была в этом. Спасибо большое!
|
|||
12
lonely_ferret
13.09.23
✎
16:19
|
Всем большое спасибо за помощь!
|
|||
13
НафНаф
13.09.23
✎
16:45
|
(12) не надо JSON собирать ручками, есть же методы в 1С для этого. Соберите в структуру или соответствие и сделайте примерно такое:
Функция СтрокаИзОбъекта(Объект) Экспорт ЗаписьJSON = Новый ЗаписьJSON; ЗаписьJSON.УстановитьСтроку(); ЗаписатьJSON(ЗаписьJSON,Объект); Возврат ЗаписьJSON.Закрыть(); КонецФункции |
|||
14
Staffa
13.09.23
✎
16:58
|
(0) Еще вариант с сериализацией в JSON. Мне, например, так намного комфортнее читать и модифицировать подобные запросы. Сериализатор сам расставит все кавычки и скобки правильно.
МассивХостов = Новый Массив; МассивХостов.Добавить("hostid"); МассивХостов.Добавить("host"); МассивИнтерфейсов = Новый Массив; МассивИнтерфейсов.Добавить(Новый Структура("interfaceid", "ip")); СтруктураПараметров = Новый Структура; СтруктураПараметров.Вставить("output", МассивХостов); СтруктураПараметров.Вставить("selectInterfaces", МассивИнтерфейсов); СтруктураJSON = Новый Структура; СтруктураJSON.Вставить("jsonrpc", "2.0"); СтруктураJSON.Вставить("method", "host.get"); СтруктураJSON.Вставить("params", СтруктураПараметров); СтруктураJSON.Вставить("id", 2); СтруктураJSON.Вставить("auth", Аид); Запись = Новый ЗаписьJSON; Запись.УстановитьСтроку(); ЗаписатьJSON(Запись, СтруктураJSON); СтрокаJSON = Запись.Закрыть(); |
|||
15
lubitelxml
13.09.23
✎
17:09
|
(14) возьму на заметку, обычно маленькие пиши через ЗаписатьНачалоОбъекта() ЗаписатьНачалоМассива(). Но в основном приходится ТЗ передавать, тут использую давно написанную функцию, которая через описанные мной методы раскладывает тз в json.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |