79

我正在尝试使用 HTTPie 解析以发送一些嵌套的 JSON 对象,但我找不到如何。很清楚如何发送 JSON 对象而不是嵌套对象,例如

{“用户”:{“名称”:“约翰”“年龄”:10 } }

4

4 回答 4

125

2022 年 1 月发布的 HTTPie 3.0 更新:

现在使用 HTTPie 语言内置了对嵌套 JSON 的支持:

$ http pie.dev/post \
  tool[name]=HTTPie \
  tool[about][homepage]=httpie.io \
  tool[about][mission]='Make APIs simple and intuitive' \
  tool[platforms][]=terminal \
  tool[platforms][]=desktop \
  tool[platforms][]=web \
  tool[platforms][]=mobile 
{
    "tool": {
        "name": "HTTPie",
        "about": {
            "mission": "Make APIs simple and intuitive"
            "homepage": "httpie.io",
        },
        "platforms": [
            "terminal",
            "desktop",
            "web",
            "mobile",
        ]
    }
}

您可以在文档中了解有关嵌套 JSON 的更多信息:https ://httpie.io/docs/cli/nested-json


早于 3.0 的 HTTPie 的旧答案:

您可以通过以下方式传递整个 JSONstdin

$ echo '{ "user": { "name": "john", "age": 10 } }' | http httpbin.org/post

指定原始 JSON 作为值:=

$ http httpbin.org/post user:='{"name": "john", "age": 10 }'
于 2016-05-17T03:21:35.057 回答
64

我喜欢这种方式:

$ http PUT localhost:8080/user <<<'{ "user": { "name": "john", "age": 10 }}'

最好是因为它与相关命令具有相同的前缀,因此Ctrl+R在 bash 中查找带有命令的命令很方便:

$ http localhost:8080/user/all
$ http GET localhost:8080/user/all # the same as the previous
$ http DELETE localhost:8080/user/234

如果您有fishshell,但没有Here Strings,我可以提出以下解决方法:

~> function tmp; set f (mktemp); echo $argv > "$f"; echo $f; end
~> http POST localhost:8080/user < (tmp '{ "user": { "name": "john", "age": 10 }}')
于 2016-10-27T12:09:13.510 回答
9

httpie 文档中提到的另一种方法是使用JSON 文件;对于更冗长且嵌套更深的有效负载,这对我来说效果很好。

http POST httpbin.org/post < post.json
于 2020-08-10T16:15:13.337 回答
1

在 Windows 10 (cmd.exe) 上,由于引用规则,语法略有不同。属性/字符串需要用双引号引起来。

http -v post https://postman-echo.com/post address:="{""city"":""london""}"

POST /post HTTP/1.1
Content-Type: application/json
Host: postman-echo.com
User-Agent: HTTPie/2.3.0
{
    "address": {
        "city": "london"
    }
}

您还可以使用 echo 发送整个对象,而无需双引号。

echo {"address": {"city":"london"} } | http -v post https://postman-echo.com/post
于 2021-05-19T11:51:04.543 回答