linux 下 jq 命令处理json文件的示例 —— 筑梦之路

简介

jq 是一个强大的命令行工具,用于处理 JSON 格式的数据。它可以帮助你查询、过滤、修改和处理 JSON 数据,使得在命令行环境下处理 JSON 变得非常方便。

 参考资料:

GitHub 地址:https://github.com/stedolan/jq
jq 官方网站: https://stedolan.github.io/jq/

语法和命令使用示例

jq 命令有很多参数和选项,可以帮助你处理和转换 JSON 数据。以下是一些常用的 jq 命令参数和选项:

基本语法jq [options] [filter] [file]
options: 可选参数,用于指定 jq 的选项。filter: 必需参数,用于指定 JSON 数据的查询和转换操作。file: 可选参数,要处理的 JSON 数据文件。
常用选项-r: 输出原始格式,而不是 JSON 编码。-c: 输出时将结果按行分隔。-s: 将输入视为多个 JSON 对象,用于处理多个 JSON 对象的数组。
查询过滤.: 表示当前对象,用于访问字段或属性。.fieldName: 选择指定字段的值。[]: 用于遍历数组元素。select(condition): 根据条件选择元素。map(transform): 对数组中的每个元素应用转换操作。

当使用 jq 进行查询和过滤 JSON 数据时,你可以根据需要执行各种操作。以下是一些常见的查询和过滤示例,假设我们有以下 JSON 数据:

[{"name": "Alice","age": 25,"city": "New York"},{"name": "Bob","age": 30,"city": "Los Angeles"},{"name": "Charlie","age": 22,"city": "Chicago"}
]

1. 选择字段

查询并选择所有人的姓名:cat data.json | jq '.[].name'
输出:"Alice"
"Bob"
"Charlie"

2. 过滤

选择年龄大于 25 岁的人的姓名和城市:cat data.json | jq '.[] | select(.age > 25) | .name, .city'
输出:"Bob"
"Los Angeles"

3. 遍历数组

遍历并输出所有人的年龄:cat data.json | jq '.[] | .age'
输出:25
30
22

4. 组合操作

选择年龄在 25 到 30 岁之间的人的姓名和城市,并按照姓名排序:cat data.json | jq '.[] | select(.age >= 25 and .age <= 30) | .name, .city' | sort
"Alice"
"New York"
"Bob"
"Los Angeles"这些只是一些基本的查询和过滤示例。jq 支持更多的操作和功能,你可以根据需要进行组合和定制。请根据你的数据和需求来调整和扩展这些示例。

修改和创建

.fieldName = value: 修改字段的值。del(.fieldName): 删除指定字段。.newField = value: 创建新的字段。使用 jq 进行 JSON 数据的修改和创建可以帮助你更新数据或添加新的字段。以下是一些示例,假设我们有以下 JSON 数据:{"name": "Alice","age": 25,"city": "New York"
}

1. 修改字段值

修改年龄字段的值为 26:cat data.json | jq '.age = 26'
输出:{"name": "Alice","age": 26,"city": "New York"
}

2. 创建新字段

添加一个新的字段 country 并设置其值为 "USA":cat data.json | jq '.country = "USA"'
输出:{"name": "Alice","age": 25,"city": "New York","country": "USA"
}

3. 组合操作

修改年龄字段的值为 26,并添加一个新的字段 country:cat data.json | jq '.age = 26 | .country = "USA"'
输出:{"name": "Alice","age": 26,"city": "New York","country": "USA"
}

4. 条件修改

如果年龄小于 30,则将城市修改为 "Chicago":cat data.json | jq 'if .age < 30 then .city = "Chicago" else . end'
输出(由于年龄小于 30,城市被修改):{"name": "Alice","age": 25,"city": "Chicago"
}这些示例演示了如何使用 jq 修改和创建 JSON 数据。你可以根据需要进行组合和调整,以实现你的需求。记住,jq 提供了强大的功能,可以进行更复杂的操作,可以根据文档和教程进一步学习。

运算符

+, -, *, /: 数值运算。==, !=, <, >, <=, >=: 比较运算。and, or, not: 逻辑运算。jq 支持多种运算符,用于在 JSON 数据中执行数值运算、比较和逻辑操作。以下是一些常见的 jq 运算符示例,假设我们有以下 JSON 数据:{"a": 10,"b": 5,"c": 15
}

1. 数值运算

进行加法、减法、乘法和除法运算:cat data.json | jq '.a + .b'
cat data.json | jq '.a - .b'
cat data.json | jq '.a * .b'
cat data.json | jq '.a / .b'
输出:15
5
50
2

2. 比较运算

比较字段值,返回布尔结果:cat data.json | jq '.a > .b'
cat data.json | jq '.a >= .c'
cat data.json | jq '.b < .c'
输出:true
false
true

3. 逻辑运算

执行逻辑 AND、OR 和 NOT 操作:cat data.json | jq '.a > 5 and .b < 10'
cat data.json | jq '.a > 15 or .b > 10'
cat data.json | jq 'not (.c > 20)'
输出:true
true
false

4. 条件运算

使用 if 和 then 进行条件运算:cat data.json | jq 'if .a > 10 then "Greater" else "Less or equal" end'
输出:"Less or equal"这些示例展示了 jq 中的一些常见运算符的用法。你可以根据需要进行更复杂的运算和组合操作,以实现你的需求。在处理 JSON 数据时,jq 提供了广泛的功能来执行各种操作。

变量和条件

as $variable: 将结果保存到变量中。if condition then ... else ... end: 条件语句。在 jq 中,你可以使用变量和条件语句来处理和转换 JSON 数据。以下是一些示例,说明如何在 jq 中使用变量和条件语句,假设我们有以下 JSON 数据:{"name": "Alice","age": 25,"city": "New York"
}

1. 使用变量

将字段值存储到变量中,并在输出中使用变量:cat data.json | jq '.age as $age | "Name: \(.name), Age: \($age)"'
输出:"Name: Alice, Age: 25"

2. 条件语句

使用 if 和 then 进行条件判断:cat data.json | jq 'if .age > 18 then "Adult" else "Minor" end'
输出:"Adult"

3. 条件和变量组合

结合条件语句和变量,根据年龄输出不同的消息:cat data.json | jq 'if .age > 18 then "Name: \(.name), Status: Adult" else "Name: \(.name), Status: Minor" end'
输出:"Name: Alice, Status: Adult"

4. 使用条件操作修改数据

根据年龄字段的值,如果大于 30 则修改城市字段:cat data.json | jq 'if .age > 30 then .city = "Chicago" else . end'
输出(由于年龄不大于 30,所以城市字段不变):{"name": "Alice","age": 25,"city": "New York"
}这些示例演示了如何在 jq 中使用变量和条件语句来处理 JSON 数据。你可以根据需要进行组合和定制,以满足你的需求。jq 提供了强大的功能来处理和转换 JSON 数据,可以根据文档和教程进一步学习。

函数

jq 支持一些内置函数,如 length, keys, values, tostring 等,用于操作和处理 JSON 数据。在 jq 中,你可以使用内置的函数来处理和转换 JSON 数据。以下是一些常见的 jq 函数示例,假设我们有以下 JSON 数据:{"name": "Alice","age": 25,"city": "New York","scores": [85, 90, 78, 95]
}

1. length函数

获取数组的长度:cat data.json | jq '.scores | length'
输出:4

2. map函数

对数组中的每个元素应用转换操作:cat data.json | jq '.scores | map(. * 2)'
输出:[170,180,156,190]

3. keys 和 values 函数

获取对象的键和值:cat data.json | jq '. | keys'
cat data.json | jq '. | values'
输出:["name","age","city","scores"]
["Alice",25,"New York",[85,90,78,95]]

4. to_entries 函数

将对象转换为键值对数组:cat data.json | jq '. | to_entries'
输出:[{"key":"name","value":"Alice"},{"key":"age","value":25},{"key":"city","value":"New York"},{"key":"scores","value":[85,90,78,95]}
]

5. 自定义函数

使用自定义函数进行操作:cat data.json | jq 'def average: reduce .[] as $item (0; . + $item) / length; .scores | average'
输出:87

这些是一些常见的 jq 命令参数和选项,可以帮助你进行 JSON 数据的查询、过滤、修改和转换。更多内容查看官方文档。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/32629.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java基础篇--运算符

目录 算术运算符 赋值运算符 比较运算符 逻辑运算符 条件运算符&#xff08;?:&#xff09; instanceof 运算符 Java运算符优先级 在程序中经常出现一些特殊符号&#xff0c;如、-、*、、>等&#xff0c;这些特殊符号称作运算符。运算符用于对数据进行算术运算、赋值…

java启动硬编码对应的是什么?

在Java中&#xff0c;启动硬编码&#xff08;Hardcoding&#xff09;指的是在代码中直接使用具体的数值、字符串或其他常量值&#xff0c;而不是通过外部配置文件或变量来获取这些值。 启动硬编码的示例&#xff1a; javaCopy code public class ExampleClass { public stati…

39 printf 的输出到设备层的调试

前言 在前面 printf 的调试 我们只是调试到了 glibc 调用系统调用, 封装了参数 stdout, 带输出的字符缓冲, 以及待输出字符长度 然后内核这边 只是到了 write 的系统调用, 并未向下细看 我们这里 稍微向下 细追一下, 看看 到达设备层面 这里是怎么具体的 impl 的 测试用例…

angular——子组件如何接收父组件的动态传值

开发过程中&#xff0c;父组件给子组件传值的情况很常见&#xff0c;今天我们就来聊聊父组件给子组件传值可能会发生哪些意外&#xff0c;什么情况下子组件无法接收到父组件最新的传值&#xff1b; 传值情况&#xff1a; 基本数据类型&#xff1a;父组件给子组件传递 基本数据…

利用logstash将graylog日志传输到kafka中

1.graylog配置输出 在System-outputs&#xff0c;选择GELF Output&#xff0c;填写如下内容&#xff0c;其它选项默认 在要输出的Stream中&#xff0c;选择Manage Outputs 选择GELF Output&#xff0c;右边选择刚才创建好的test。 2.安装logstash&#xff0c;作为中间临时…

《Java-SE-第三十四章》之Optional

前言 在你立足处深挖下去,就会有泉水涌出!别管蒙昧者们叫嚷:“下边永远是地狱!” 博客主页&#xff1a;KC老衲爱尼姑的博客主页 博主的github&#xff0c;平常所写代码皆在于此 共勉&#xff1a;talk is cheap, show me the code 作者是爪哇岛的新手&#xff0c;水平很有限&…

C#小轮子:Visual Studio自动编译Sass文件

文章目录 前言插件安装插件使用compilerconfig.jsonsass输入和css输出&#xff08;自动生成&#xff09;默认配置&#xff08;我不懂就不去动他了&#xff09; 前言 我们知道css文件用起来太麻烦&#xff0c;如果样式一多&#xff0c;嵌套起来用css样式就眼花缭乱。Sass使用层…

Kafka的下载和安装

一、Kafka下载和安装 下载地址&#xff1a;https://kafka.apache.org/downloads 下载完毕解压即可 linux解压命令tar -zxvf kafka_2.13-3.5.1.tgz&#xff0c;linux环境下指令是在\kafka_2.13-3.5.1\bin目录。 windows直接解压即可&#xff0c;windows环境下指令是在kafka_2.…

强化学习-信任区域策略优化和近端策略优化(第7章)

来源书籍&#xff1a; TENSORFLOW REINFORCEMENT LEARNING QUICK START GUIDE 《TensorFlow强化学习快速入门指南-使用Python动手搭建自学习的智能体》 著者&#xff1a;[美]考希克巴拉克里希南&#xff08;Kaushik Balakrishnan&#xff09; 译者&#xff1a;赵卫东 出版…

Rust 编程小技巧摘选(7)

目录 Rust 编程小技巧(7) 1. 交换变量 2. 翻转数组 3. for_each() 用法 4. 结构体 Display trait 5. HashMap 和 BTreeMap 6. 遍历输出哈希表 7. 分离奇数和偶数 8. 判断素数&#xff08;质数&#xff09; Rust 编程小技巧(7) 1. 交换变量 与python, go等语言用法类…

计算机网络:网络字节序

目录 一、字节序1.字节序概念2.字节序的理解&#xff08;1&#xff09;大端模式存储数据&#xff08;2&#xff09;小端模式存储数据 二、网络字节序 一、字节序 1.字节序概念 字节序&#xff1a;内存中存储多字节数据的顺序。 难道存储数据还要看顺序吗&#xff1f; yes。内…

python读入和读出图像

python提供了PIL库和opencv库对图像进行读取并保存。 图像读入读出 给定一张RGB的彩色图像&#xff0c;PIL库将其读入: import cv2 from PIL import Image # 读入图像 image2 Image.open(cub1.jpg) print(type(image2)) image2_array np.array(image2) print(image2_array…

【将回声引入信号中】在语音或音频文件中引入混响或简单回声,以研究回声延迟和回波幅度对生成的回波信号感知的影响(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Golang字符串处理深入解析:探索 strings 标准库的全部方法

Golang 的 strings 标准库提供了许多用于处理字符串的函数。以下是一些主要的方法&#xff1a; Contains(s, substr string) bool: 检查字符串是否包含子串。ContainsAny(s, chars string) bool: 检查字符串是否包含字符集中的任何字符。ContainsRune(s string, r rune) bool:…

Java 正则表达式【匹配与分组基本原理】

简介 我们一般使用正则表达式是用来处理字符串的&#xff0c;不管是实际的开发中还是我们的算法竞赛中&#xff0c;使用正则表达式绝对可以大大提升我们的效率。 正则表达式&#xff08;regular expression&#xff09;其实就是对字符串进行模式匹配的技术。 快速入门 我们这里…

第三篇|金融人数据来源有哪些

数据对于金融行业真的很重要&#xff0c;那么金融人有哪些途径查数据呢&#xff1f; 国内&#xff1a; 1. 国家统计局 这个应该是无论什么行业都使用最频繁的网站&#xff0c;每个月都会固定发上个月资产投资数据 、工业增加值和利润数据等常规数据&#xff0c;其他数据也会…

06 Word2Vec模型(第一个专门做词向量的模型,CBOW和Skip-gram)

博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https://github.com/nickchen121/Pre-training-language-model 配套博客链接:https://www.cnblogs.com/nickchen121/p/15105048.html 神经网络语言模型(NNL…

什么是分布式系统,如何学习分布式系统

正文 虽然本人在前面也写过好几篇分布式系统相关的文章&#xff0c;主要包CAP理论&#xff0c;分布式储存与分布式事务&#xff0c;但对于分布式系统&#xff0c;并没有一个跟清晰的概念。分布式系统涉及到很多的技术、理论与协议&#xff0c;很多人也说&#xff0c;分布式系统…

git实用命令 git常用分支命令

一、git创建本地分支 要在Git中创建一个新的分支&#xff0c;按照以下步骤进行操作&#xff1a; 确保你当前在要创建分支的代码状态下。你可以使用 git status 命令查看当前的代码状态&#xff0c;并使用 git add 和 git commit 命令将修改的文件提交到当前分支。 1.使用 gi…

Docker 安装和架构说明

Docker 并非是一个通用的容器工具&#xff0c;它依赖于已存在并运行的Linux内核环境。 Docker实质上是在已经运行的Liunx下制造了一个隔离的文件环境&#xff0c;因此他的执行效率几乎等同于所部署的linux主机。因此Docker必须部署在Linux内核系统上。如果其他系统想部署Docke…