在 cURL 中处理 JSON 数据 是 API 测试中最常见的场景。正确发送和接收 JSON 数据需要设置合适的请求头和使用正确的参数。
发送 JSON 数据
bash# 基本 JSON POST 请求 curl -X POST https://api.example.com/users \ -H "Content-Type: application/json" \ -d '{"name":"张三","email":"zhangsan@example.com"}' # 使用单引号包裹 JSON(推荐) curl -X POST https://api.example.com/users \ -H "Content-Type: application/json" \ -d '{"name":"John","age":25}' # JSON 中包含引号时使用转义 curl -X POST https://api.example.com/data \ -H "Content-Type: application/json" \ -d "{\"name\":\"John's Data\",\"value\":\"test\"}" # 从文件读取 JSON 数据 curl -X POST https://api.example.com/users \ -H "Content-Type: application/json" \ -d @user.json # 使用 heredoc 发送多行 JSON curl -X POST https://api.example.com/users \ -H "Content-Type: application/json" \ -d @- <<EOF { "name": "张三", "email": "zhangsan@example.com", "roles": ["admin", "user"], "settings": { "theme": "dark", "language": "zh-CN" } } EOF
接收和处理 JSON 响应
bash# 获取 JSON 响应 curl https://api.example.com/users # 格式化 JSON 输出(使用 jq) curl -s https://api.example.com/users | jq # 提取特定字段 curl -s https://api.example.com/users | jq '.name' # 仅显示响应体(静默模式) curl -s https://api.example.com/users # 保存 JSON 响应到文件 curl -s https://api.example.com/users -o users.json # 显示响应头和格式化的 JSON curl -i https://api.example.com/users | jq
常见 JSON 操作场景
bash# RESTful API 创建资源 curl -X POST https://api.example.com/products \ -H "Content-Type: application/json" \ -H "Authorization: Bearer token123" \ -d '{ "name": "iPhone 15", "price": 7999, "stock": 100 }' # 更新资源(PUT) curl -X PUT https://api.example.com/products/123 \ -H "Content-Type: application/json" \ -d '{"price": 6999}' # 部分更新(PATCH) curl -X PATCH https://api.example.com/products/123 \ -H "Content-Type: application/json" \ -d '{"stock": 50}' # 批量操作 curl -X POST https://api.example.com/products/batch \ -H "Content-Type: application/json" \ -d @products.json
重要参数说明
| 参数 | 作用 | 示例 |
|---|---|---|
-H "Content-Type: application/json" | 声明发送 JSON 格式 | 必须设置 |
-d 或 --data | 发送数据 | -d '{"key":"value"}' |
-d @filename | 从文件读取数据 | -d @data.json |
-s 或 --silent | 静默模式 | 不显示进度信息 |
-o | 输出到文件 | -o response.json |
注意事项
- 必须设置 Content-Type:服务器需要知道请求体是 JSON 格式
- 引号处理:JSON 字符串建议用单引号包裹,内部使用双引号
- 特殊字符:JSON 中的特殊字符需要正确转义
- 编码问题:确保终端支持 UTF-8 编码以正确显示中文