Linux jq 命令 JSON 处理指南


简介

JSON (JavaScript 对象表示法) 是一种流行的数据格式,用于在应用程序之间交换信息。它轻量级且易于理解。为了高效地处理 JSON 数据,Linux 提供了一个名为 jq 的命令行工具。这个强大的工具使用户能够轻松地提取、操作和转换 JSON 数据。使用 jq,用户可以快速对 JSON 数据执行各种任务,包括过滤、排序和选择特定字段。此外,jq 支持各种输出格式,使其易于与其他命令行工具集成。在本文中,我们将探讨 jq 命令及其用于 JSON 处理的各种特性和功能。

jq 的安装过程

在开始使用 jq 之前,我们需要确保它已安装在我们的系统上。可以使用 Linux 包管理器安装 jq。例如,要在 Ubuntu 上安装 jq,可以使用以下命令:

$ sudo apt-get install jq

完成任何这些安装方法后,您可以通过运行以下命令来验证安装:

$ jq --version

如果 jq 安装正确,此命令应显示安装在系统上的 jq 版本号。

从基本命令开始

示例

$ echo '{"fruit":{"name":"mango","color":"yellow","price":4.20}}' | jq '.'

jq 命令与 "." 过滤器一起使用,用于在控制台输出中漂亮地打印 JSON 对象。"." 过滤器只需选择整个输入对象并将其返回。

输出

{
   "fruit": {
      "name": "mango",
      "color": "yellow",
      "price": 4.2
   }
}

安装和使用 curl 命令

示例

$ sudo apt install curl

安装后,您可以在终端中运行此命令:

$ curl http://api.open-notify.org/iss-now.json | jq '.'

此命令使用 curl 命令向 URL http://api.open-notify.org/iss-now.json 发出 HTTP GET 请求,该请求返回一个 JSON 对象,其中包含国际空间站 (ISS) 的当前纬度和经度坐标。

输出

% Total    % Received % Xferd   Average Speed    Time    Time     Time      Current
                                 Dload  Upload  Total   Spent     Left       Speed
100   112  100   112    0     0   159      0    --:--:-- --:--:-- --:--:--     159
{
   "message": "success",
   "iss_position": {
      "latitude": "19.4146",
      "longitude": "-3.3218"
   },
   "timestamp": 1678259912
}

创建 JSON 文件

示例

首先进入桌面

$ cd Desktop/

在桌面上创建一个文件,文件名是 fruit.json

$ touch fruit.json

在桌面上打开文件并输入以下代码。

{
   "fruit": {
      "name": "mango",
      "color": "yellow",
      "price": 4.2
   }
}

输入此代码后保存代码,然后返回终端并运行以下命令:

$ cat fruit.json

输出

{
   "fruit": {
      "name": "mango",
      "color": "yellow",
      "price": 4.2
   }
}

访问 JSON 文件属性的不同方法

示例

现在我们尝试将属性值链接在一起以访问嵌套对象,这是一个示例:

$ jq '.fruit.name' fruit.json
"mango"

我们使用逗号分隔它们来从 JSON 对象中检索多个键,这是一个示例:

$ jq '.fruit.color,.fruit.price' fruit.json
"yellow"
4.2

打印数组中的每个元素

这是数组的基本格式。

$ echo '["Aditya","Adil","Arindom"]' | jq '.[]'

输出

"Aditya"
"Adil"
"Arindom"

在桌面上创建一个新的 JSON 文件

在桌面上创建文件,文件名是 fruits.json

$ touch fruits.json

现在在桌面上打开新文件,然后复制粘贴以下代码。

[
   {
      "name": "Mango",
      "color": "yellow",
      "price": 4.2
   },
   {
      "name": "Grave",
      "color": "green",
      "price": 2.5
   },
   {
      "name": "Blueberry",
      "color": "blue",
      "price": 1.25
   }
]

之后保存文件,再次返回终端并运行此代码。

打印数组中每个对象中的所有水果名称

示例

$ jq '.[].name' fruits.json

[] 运算符用于迭代数组的每个元素,| 运算符用于将多个过滤器链接在一起。第一个过滤器 .[] 选择数组的每个元素,第二个过滤器 .name 选择从每个选定元素中选择的 "name" 键的值。

输出

"Mango"
"Grave"
"Blueberry"

按索引访问价格

示例

$ jq '.[1].price' fruits.json

数组索引从 0 开始,芒果是第 0 个索引,葡萄是第 1 个索引,蓝莓是第 2 个索引。

在此命令中,我们尝试打印第一个索引,即葡萄的价格。

输出

2.5

使用 jq 命令切片数组

示例

jq 中的切片是指根据其索引或键选择数组或对象中的元素子集。

$ echo '[10,12,14,16,18,20,22,24,26,28,30]' | jq '.[4:8]'

输出

[
   18,
   20,
   22,
   24
]

在您提供的示例中,切片 .[4:8] 选择索引为 4, 5, 6 和 7 的元素,但不包括索引为 8 的元素。

从数组中查找最大值和最小值

如果我们需要确定输入数组中最小的或最大的元素,我们可以使用 min 和 max 函数

示例

查找最小值:

$ jq '[.[].price] | min' fruits.json

输出

1.25

使用 select 函数

select 函数是我们可用于 JSON 查询的另一个有用工具。

示例

$ jq '.[] | select(.color=="yellow" and .price>=4.2)' fruits.json

输出

{
   "name": "Mango",
   "color": "yellow",
   "price": 4.2
}

从 JSON 中删除键

有时,我们可能需要从 JSON 对象中消除键值对。

示例

$ jq 'del(.fruit.color)' fruit.json

输出

{
   "fruit": {
      "name": "mango",
      "price": 4.2
   }
}

结论

Linux jq 命令是在命令行上处理 JSON 数据的重要工具。在本文中,我们提供了一个关于 jq 命令 JSON 处理的指南,包括如何安装它,如何将其用于基本操作。我们还提供了如何使用 jq 命令处理 JSON 数据的示例,以及代码和输出。

更新于:2023年3月29日

浏览量 11K+

启动您的 职业生涯

通过完成课程获得认证

开始
广告