在命令行中传递JSON数据是一种常见的需求,尤其在调用API、测试接口或自动化脚本中,JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人类阅读和编写,同时也易于机器解析和生成,通过命令行传递JSON数据,可以高效地实现程序间的数据交互,以下是几种常见的方法及其使用场景。

通过命令行参数传递JSON
许多命令行工具支持直接接收JSON格式的参数,使用curl
命令调用API时,可以通过-d
或--data
选项传递JSON数据,需要注意的是,JSON字符串通常需要用单引号或双引号包裹,以避免命令行解析错误。
curl -X POST -H "Content-Type: application/json" -d '{"name": "Alice", "age": 30}' https://api.example.com/users
在这个例子中,-d
后面的字符串是一个JSON对象,包含了name
和age
两个字段。-H
选项用于设置请求头,告诉服务器接收的是JSON格式数据。
通过文件传递JSON
当JSON数据较复杂或需要多次使用时,将其保存为文件是一种更可靠的方式,将JSON数据保存为data.json
文件,然后通过命令行工具读取该文件,以jq
工具为例,它可以处理和过滤JSON数据:
cat data.json | jq '.name'
这里,cat
命令读取data.json
文件,并通过管道将数据传递给jq
工具,jq
会提取并输出JSON对象中的name
字段,许多编程语言的命令行工具(如Python的json.tool
)也支持从文件读取JSON:

python3 -m json.tool data.json
使用环境变量传递JSON
环境变量可以存储简单的JSON字符串,但需要注意转义和长度限制,在Linux或macOS中,可以通过export
命令设置环境变量:
export USER_DATA='{"name": "Bob", "age": 25}'
然后在脚本中通过$USER_DATA
引用该变量,环境变量通常不适合存储复杂的JSON数据,因为不同操作系统对环境变量的长度和字符支持有限制。
通过标准输入传递JSON
标准输入(stdin)是另一种传递JSON数据的方式,尤其适用于需要动态生成JSON数据的场景,使用echo
或printf
命令生成JSON字符串,并通过管道传递给目标命令:
echo '{"name": "Charlie", "age": 35}' | python3 -c "import sys, json; data=json.load(sys.stdin); print(data['name'])"
在这个例子中,echo
输出的JSON数据通过管道传递给Python脚本,脚本读取标准输入并解析JSON,最后输出name
字段的值。

不同工具的JSON传递方式对比
以下是几种常见工具传递JSON的方式总结:
工具/方法 | 示例命令 | 适用场景 |
---|---|---|
curl |
curl -d '{"key": "value"}' http://example.com |
HTTP请求传递JSON数据 |
jq |
echo '{"key": "value"}' | jq '.key' |
处理和过滤JSON数据 |
Python | echo '{"key": "value"}' | python3 -m json.tool |
JSON格式化和验证 |
环境变量 | export JSON_DATA='{"key": "value"}' |
存储简单JSON数据 |
标准输入 | echo '{"key": "value"}' | command |
动态生成并传递JSON数据 |
相关问答FAQs
Q1: 如何在命令行中验证JSON数据的格式是否正确?
A1: 可以使用Python的json.tool
模块或jq
工具验证JSON格式,运行python3 -m json.tool input.json
,如果JSON格式正确,会输出格式化后的数据;否则会报错,同样,jq . input.json
也可以验证JSON的有效性。
Q2: 在Windows命令行中如何正确传递JSON数据?
A2: 在Windows中,JSON字符串需要用双引号包裹,并且内部的双引号需要用反斜杠转义,使用curl
时可以这样写:curl -d "{\"name\": \"Alice\", \"age\": 30}" http://example.com
,Windows的PowerShell支持更复杂的JSON处理,可以使用ConvertFrom-Json
命令将JSON字符串转换为对象。