jq工具及其常用用法 | 京东物流技术团队
近来在工作中处理JSON处理较多,深入研究了一下jq,之前对jq的使用一直停留在JSON数据格式化的层面,实际它的能力远不止于此。
在处理JSON数据时,我们经常需要在命令行中进行过滤、查询和编辑的操作。jq是一个强大的命令行JSON处理工具, 它可以让我们轻松地对JSON数据进行各种操作。本文将简要介绍jq的基本概念和常用功能,并提供一些实际的例子。
一、jq简介
jq是一个轻量级且灵活的命令行JSON处理器。它允许你基于键、值和数组索引来提取、过滤和修改JSON数据。jq主要有以下特性:
-
基于流式处理,适用于大型JSON数据文件。
-
提供了丰富的操作符和函数,与 Unix 的管道(pipe)和 I/O 重定向兼容。
-
支持条件过滤、字符串操作、数学运算和自定义函数等高级功能。
二、安装jq
在大多数Linux发行版上,可以通过包管理器轻松安装jq:
-
在基于Debian的发行版上:
sudo apt-get install jq
-
在基于RHEL的发行版上:
sudo yum install jq
-
在Arch Linux上:
sudo pacman -S jq
-
在macOS上,可以使用Homebrew安装:
brew install jq
三、常用jq用法
以下是jq的一些常见用法。
1. 读取属性值
要从输入的JSON对象中提取属性值,可以使用.
操作符。
举例:有一个名为sample.json
的文件,内容如下:
{ "name": "Alice", "age": 30, "city": "New York" }
提取名字:
cat sample.json | jq '.name'
输出结果:
"Alice"
2. 过滤数组元素
要对数组元素进行过滤,可以使用[]
操作符。
举例:有一个名为students.json
的文件,内容如下:
[ { "name": "Alice", "age": 30, "city": "New York" }, { "name": "Bob", "age": 25, "city": "San Francisco" }, { "name": "Charlie", "age": 23, "city": "Los Angeles" } ]
提取所有名字:
cat students.json | jq '.[].name'
输出结果:
"Alice" "Bob" "Charlie"
3. 选择特定数组元素
如果要返回具有某些属性的特定元素,则可以使用选择器。例如,要选择年龄超过25岁的学生:
cat students.json | jq '.[] | select(.age > 25)'
输出结果:
{ "name": "Alice", "age": 30, "city": "New York" }
4. 排序和唯一化数组
可以使用sort
,sort_by()
和unique
函数对数组进行操作。
例如,对来自sample-array.json
文件的年龄进行排序和去重:
[30, 20, 25, 30, 25, 20]
排序且去重:
cat sample-array.json | jq 'unique | sort'
输出结果:
[ 20, 25, 30 ]
5. 修改数据
除了筛选和查询,jq还支持创建和修改数据。例如,为students.json
中的每个学生添加 “isActive” 属性:
cat students.json | jq '.[] | {name, age, city, isActive: true}'
输出结果:
{ "name": "Alice", "age": 30, "city": "New York", "isActive": true } { "name": "Bob", "age": 25, "city": "San Francisco", "isActive": true } { "name": "Charlie", "age": 23, "city": "Los Angeles", "isActive": true }
四、总结
jq是个非常强大的命令行JSON处理工具,支持各种数据操作功能,能够帮助你在处理JSON数据时更加便捷和高效。本文列举了一些常用的jq使用案例,但jq的功能远不止于此。更多丰富的功能可以在官方文档(点击查看)中找到。 熟练掌握jq有助于提高命令行处理JSON数据的能力,为其它处理和分析工具提供更方便的数据源。
作者:京东物流 张涛
来源:京东云开发者社区 自猿其说Tech 转载请注明来源

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
什么???CSS也能原子化! | 京东云技术团队
1.什么是原子化 CSS? Atomic CSS is the approach to CSS architecture that favors small, single-purpose classes with names based on visual function. Let’s Define Exactly What Atomic CSS is 上文的意思翻译过来就是原子化CSS是一种CSS的架构方法,倾向于使用用途单一且简单的CSS,通常是根据视觉效果进行类的命名,不同于BEM规则的CSS,原子的意思就是将CSS进行拆分,每个样式都有一个唯一的CSS规则,例子如下,每个样式都配置一个固定类名: // margin为0px .m-0{ margin:0px; } // 文字为红色 .text-red{ color:red; } .font-blod{ font-weight:blod; } .text-center{ text-align:center; } // 样式使用方式 <div class = "m-10 text-ce...
- 下一篇
log4j2同步日志引发的性能问题 | 京东物流技术团队
1 问题回顾 1.1 问题描述 在项目的性能测试中,相关的接口的随着并发数增加,接口的响应时间变长,接口吞吐不再增长,应用的CPU使用率较高。 1.2 分析思路 谁导致的CPU较高,阻塞接口TPS的增长?接口的响应时间的调用链分布是什么样的,有没有慢的点? 1)使用火焰图分析应用的CPU如下,其中log4j2日志占了40%左右CPU,初步怀疑是log4j2的问题。 2)调用链的分析 通过pfinder查看调用链发现,接口总耗时78ms,没有明显慢的调用方法和慢sql等,先排除接口的本身的代码问题。 1.3 初步结论 log4j2的问题,需详细分析日志的相关配置log4j2.xml。 上面可以看到日志中Loggers节点下的节点以及节点都是打印的同步日志。同步日志是程序的业务逻辑和日志输出语句均在一个线程运行,当日志较多,在一定程度上阻塞了业务的运行效率。改成异步日志试一下: 改成异步日志配置:使用AsyncLogger 1.4 回归验证 同步日志改成异步日志后。同样10并发,接口的TP99由 51ms 降到 23ms,接口的吞吐TPS由 493提高到 1078,应用的CPU由 82%...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装MyCat,轻松搞定数据库的读写分离、垂直分库、水平分库
- CentOS8编译安装MySQL8.0.19
- CentOS6,CentOS7官方镜像安装Oracle11G
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2整合Thymeleaf,官方推荐html解决方案
- MySQL8.0.19开启GTID主从同步CentOS8
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- Red5直播服务器,属于Java语言的直播服务器
- CentOS6,7,8上安装Nginx,支持https2.0的开启
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7