2017-02-18 8 views
3

У меня возникли проблемы с получением curl и Json (Node.js) работать, когда я в curl опустить «[и]» часть JSON-RPC запроса Params. Я использую именованные параметры (т. Е. Объект, а не массив).Использование Curl с Json (Node.js)

Это работает:

curl -v -i POST -H "Content-Type: application/json" \ 
-d '{"jsonrpc": "2.0", "method":"registerPerson", "params": ["{\"username\":\"morten10\",\"password\":\"mypass\"}"], "id":1 }' \ 
http://localhost:3000 

Однако, когда я опускаем [ "и]" из Params он не работает:

curl -v -i POST -H "Content-Type: application/json" \ 
-d '{"jsonrpc": "2.0", "method":"registerPerson", "params": {\"username\":\"morten10\",\"password\":\"mypass\"}, "id":1 }' \ 
http://localhost:3000 

и Джейсон дает сообщение об ошибке:

TypeError: First argument must be a string or Buffer 

Однако, согласно спецификации JSON-RPC 2.0 и ее примерам, я должен быть в состоянии исключить Люд в «[и]» часть из Params, когда я использовать именованные параметры, как в этом примере:

--> {"jsonrpc": "2.0", "method": "subtract", "params": {"minuend": 42, "subtrahend": 23}, "id": 4} 
<-- {"jsonrpc": "2.0", "result": 19, "id": 4} 

Что я не получаю?

Спасибо!

ответ

2

Я думаю, что ваш объект должен быть строкой, как было предложено ошибкой.

Try:

curl -v -i POST -H "Content-Type: application/json" \ 
-d '{"jsonrpc": "2.0", "method":"registerPerson", "params": "{\"username\":\"morten10\",\"password\":\"mypass\"}", "id":1 }' \ 
http://localhost:3000 
+0

Спасибо, но я попробовал это уже. Но переход на: 'curl -v -i POST -H 'Content-Type: application/json" -d' {"jsonrpc": "2.0", "method": "registerPerson", "params": "{ \ "username \": \ "morten10 \", \ "password \": \ "mypass \"} "," id ": 1} 'http: // localhost: 3000' заставляет Jayson дать это сообщение (до мой код достигнут): '{" jsonrpc ":" 2.0 "," id ": null," error ": {" code ": - 32600," message ":" Invalid request "}}' Перейти фигура. – ilsundal

+0

Интересно отметить, что Jayson устанавливает «id» в null в этом ответе об ошибке. Согласно спецификации JSON-RPC 2.0, «id» должен быть нулевым, только если в запросе обнаружена ошибка «id». Таким образом, по-видимому, Jayson даже не может найти «id» в запросе. Weird. Предполагая, что Jayson не глючит, я предполагаю, что это проблема с кавычками-побегами, но я не вижу, что не так в этом запросе. – ilsundal

+0

Единственная другая вещь, которую я мог бы предложить, это положить ее через linter, чтобы увидеть, поможет ли это вам разобраться, я замечаю, что удаление внешних одинарных кавычек позволит ей перейти на [jsonlint.com] (http: // jsonlint. com), например. – Brian