写点什么

进阶命令 curl 与 jq:如何在 Linux 中进行接口请求和 JSON 数据处理

  • 2024-12-30
    北京
  • 本文字数:2544 字

    阅读完需:约 8 分钟

全面解析软件测试开发:人工智能测试、自动化测试、性能测试、测试左移、测试右移到DevOps如何驱动持续交付

在现代开发和运维工作中,自动化、数据交互和 API 集成是常见的需求。在 Linux 环境中,两个非常强大的命令行工具——curl 和 jq,能够帮助开发者和系统管理员高效地进行接口请求与 JSON 数据处理。本文将深入探讨如何使用这两个工具,来高效地处理 HTTP 请求和 JSON 数据解析。

1. curl 命令简介:发起 HTTP 请求

curl 是一个用于发送网络请求的命令行工具,支持 HTTP、HTTPS、FTP 等多种协议。它非常适合在 Linux 中进行接口请求、测试 API 和下载文件。

1.1 安装 curl

大多数 Linux 发行版默认都包含 curl,但如果未安装,可以通过以下命令进行安装:

  • Debian/Ubuntu 系列

sudo apt updatesudo apt install curl
复制代码

CentOS/RHEL 系列

sudo yum install curl
复制代码

1.2 基本用法

最基本的 curl 用法是通过 URL 发起 HTTP 请求,获取响应内容。

curl https://api.example.com/data
复制代码

这个命令会发起一个 GET 请求,并输出响应内容。

1.3 发起 GET 请求

默认情况下,curl 发起的是一个 GET 请求。如果需要将数据发送到服务器,可以使用 -d 选项:

curl -X GET https://api.example.com/data
复制代码

1.4 发起 POST 请求

POST 请求常用于向服务器发送数据。通过 -X POST 指定请求方法,使用 -d 提供数据:

curl -X POST https://api.example.com/submit -d '{"name": "John", "age": 30}' -H "Content-Type: application/json"
复制代码

这将向服务器发送一个 JSON 格式的 POST 请求。

  • -d 选项用于传递数据。

  • -H 选项用于指定请求头,这里我们指定了 Content-Type: application/json,告诉服务器数据是 JSON 格式。

1.5 添加自定义请求头

许多 API 需要附加身份验证或者额外的请求头。使用 -H 选项可以轻松添加:

curl -X GET https://api.example.com/data -H "Authorization: Bearer <token>"
复制代码

1.6 输出到文件

如果你想将 curl 请求的响应直接保存到文件中,可以使用 -o 选项:

curl https://api.example.com/data -o response.json
复制代码

1.7 查看请求头和响应头

在调试 API 时,查看请求和响应头非常重要。使用 -i 选项可以查看响应头,-v 选项则可以查看请求头:

curl -i https://api.example.com/datacurl -v https://api.example.com/data
复制代码

2. jq 命令简介:JSON 数据处理

jq 是一个强大的命令行 JSON 处理工具,能够帮助用户轻松解析、过滤和处理 JSON 数据。它不仅支持读取 JSON 文件,还能从命令行的输入中进行数据处理。

2.1 安装 jq

在 Linux 上安装 jq 同样非常简单:

  • Debian/Ubuntu 系列

sudo apt updatesudo apt install jq
复制代码

CentOS/RHEL 系列

sudo yum install jq
复制代码

2.2 基本用法

jq 的基本用法是从文件或标准输入中读取 JSON 数据,并按照指定的规则进行处理:

echo '{"name": "John", "age": 30}' | jq '.name'
复制代码

此命令会输出 John,即 JSON 对象中 name 字段的值。

2.3 过滤和提取数据

jq 可以通过路径表达式过滤 JSON 数据。假设返回的数据是一个数组或嵌套对象,我们可以使用点号 . 来选择特定字段。

假设有以下 JSON 响应:

{  "user": {    "name": "John",    "age": 30,    "address": {      "city": "New York",      "state": "NY"    }  }}

复制代码

我们可以使用 jq 来提取不同层级的数据:

echo '{"user": {"name": "John", "age": 30, "address": {"city": "New York", "state": "NY"}}}' | jq '.user.name'
复制代码

输出:

"John"
echo '{"user": {"name": "John", "age": 30, "address": {"city": "New York", "state": "NY"}}}' | jq '.user.address.city'
复制代码

输出:

"New York"
复制代码

2.4 处理数组

jq 也能够非常方便地处理数组。假设我们有如下 JSON 数组:

[  {"id": 1, "name": "Alice"},  {"id": 2, "name": "Bob"},  {"id": 3, "name": "Charlie"}]
复制代码

我们可以提取所有人的名字:

echo '[{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}, {"id": 3, "name": "Charlie"}]' | jq '.[].name'
复制代码

输出:

"Alice""Bob""Charlie"
复制代码

2.5 过滤和修改数据

jq 支持数据的过滤和修改。假设我们有一个 JSON 响应,且希望仅提取符合条件的项:

[  {"id": 1, "name": "Alice", "age": 25},  {"id": 2, "name": "Bob", "age": 30},  {"id": 3, "name": "Charlie", "age": 35}]
复制代码

我们可以过滤出年龄大于 30 的用户:

echo '[{"id": 1, "name": "Alice", "age": 25}, {"id": 2, "name": "Bob", "age": 30}, {"id": 3, "name": "Charlie", "age": 35}]' | jq '.[] | select(.age > 30)'
复制代码

输出:

{  "id": 3,  "name": "Charlie",  "age": 35}
复制代码

2.6 修改数据

jq 还支持修改数据,例如更新某个字段的值。假设我们想更新 Bob 的年龄:

echo '[{"id": 1, "name": "Alice", "age": 25}, {"id": 2, "name": "Bob", "age": 30}, {"id": 3, "name": "Charlie", "age": 35}]' | jq '(.[] | select(.name == "Bob")).age = 31'
复制代码

输出:

[  {    "id": 1,    "name": "Alice",    "age": 25  },  {    "id": 2,    "name": "Bob",    "age": 31  },  {    "id": 3,    "name": "Charlie",    "age": 35  }]
复制代码

3. curl 与 jq 联合使用:接口请求和 JSON 数据处理

结合 curl 和 jq,我们可以发起 HTTP 请求并直接处理返回的 JSON 数据。这是进行接口调试和自动化数据处理的常见场景。

3.1 示例:请求 API 并解析响应

假设我们需要从 API 获取用户信息,并提取其中的名字和年龄:

curl -s https://api.example.com/users | jq '.users[] | {name, age}'
复制代码
  • curl -s:静默模式,隐藏进度信息。

  • jq '.users[] | {name, age}':提取 users 数组中每个用户的 name 和 age

3.2 示例:获取天气信息并提取温度

通过 curl 获取天气 API 的 JSON 响应,并使用 jq 提取温度数据:

curl -s "https://api.openweathermap.org/data/2.5/weather?q=London&appid=YOUR_API_KEY" | jq '.main.temp'
复制代码

这将返回伦敦当前的温度。4. 总结curl 和 jq 是 Linux 中进行接口请求和 JSON 数据处理的两个强大工具。它们不仅可以帮助开发者和运维人员高效地发起 HTTP 请求,还可以轻松处理和提取 JSON 格式的数据。通过将这两个工具结合使用,可以实现更高效的自动化任务、日志处理和数据分析。

  • **curl


用户头像

社区:ceshiren.com 微信:ceshiren2023 2022-08-29 加入

微信公众号:霍格沃兹测试开发 提供性能测试、自动化测试、测试开发等资料、实事更新一线互联网大厂测试岗位内推需求,共享测试行业动态及资讯,更可零距离接触众多业内大佬

评论

发布
暂无评论
进阶命令 curl 与 jq:如何在 Linux 中进行接口请求和 JSON 数据处理_测试_测吧(北京)科技有限公司_InfoQ写作社区