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 请求,该请求返回一个包含国际空间站 (ISS) 当前经纬度坐标的 JSON 对象。
输出
% 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 开始,这里 Mango 是第 0 个索引,Grave 是第 1 个索引,Blueberry 是第 2 个索引。
在此命令中,我们尝试打印第 1 个索引,即 Grave 的价格。
输出
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 数据的示例,以及代码和输出。
有用资源
linux 参考教程 - 该教程包含有关 linux 的更多信息:https://www.cainiaomax.com/linux/

