使用Curl与Json(Node.js)

3
我遇到了问题,当我在curl中省略JSON-RPC请求参数的"[和]"部分时,无法使curlJson (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

然而,当我从参数中省略了“[”和“]”时,它不起作用:
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 给出了这个错误信息:

TypeError: First argument must be a string or Buffer

然而,根据JSON-RPC 2.0规范和其示例,当我使用命名参数时,应该能够从params中排除"[ and ]"部分,就像这个例子一样:

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

我没有理解什么?

谢谢!

1个回答

2
我认为你的对象需要是一个字符串,正如错误提示所建议的那样。
尝试一下: ```python str(your_object) ``` 请注意保留HTML标签。
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

谢谢,但我已经尝试过了。但是更改为: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
有趣的是,在错误响应中,Jayson将“id”设置为null。根据JSON-RPC 2.0规范,仅当请求中检测到“id”时才必须为空。因此,显然Jayson甚至无法定位请求中的“id”。奇怪。假设Jayson没有漏洞,我猜测这可能是引用转义问题,但我看不出请求有什么问题。 - ilsundal
我唯一能建议的是将其通过一个linter,看看是否有助于你找出问题。例如,我注意到删除外部单引号将允许它在jsonlint.com上通过。 - Brian
是的,它应该工作,而且根据 jsonlint.com 的结果也是如此。我已经在 GitHub 上向 Jayson 提交了一个错误报告,链接在这里:https://github.com/tedeh/jayson/issues/87。感谢你的帮助,Brian :) - ilsundal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接