jq工具及其常用用法 | 京东物流技术团队

近来在工作中处理JSON处理较多,深入研究了一下jq,之前对jq的使用一直停留在JSON数据格式化的层面,实际它的能力远不止于此。
在处理JSON数据时,我们经常需要在命令行中进行过滤、查询和编辑的操作。jq是一个强大的命令行JSON处理工具, 它可以让我们轻松地对JSON数据进行各种操作。本文将简要介绍jq的基本概念和常用功能,并提供一些实际的例子。

一、jq简介

jq是一个轻量级且灵活的命令行JSON处理器。它允许你基于键、值和数组索引来提取、过滤和修改JSON数据。jq主要有以下特性:

  1. 基于流式处理,适用于大型JSON数据文件。

  2. 提供了丰富的操作符和函数,与 Unix 的管道(pipe)和 I/O 重定向兼容。

  3. 支持条件过滤、字符串操作、数学运算和自定义函数等高级功能。

二、安装jq

在大多数Linux发行版上,可以通过包管理器轻松安装jq:

  • 在基于Debian的发行版上:

    1sudo apt-get install jq 2 3
  • 在基于RHEL的发行版上:

    1sudo yum install jq 2 3
  • 在Arch Linux上:

    1sudo pacman -S jq 2 3
  • 在macOS上,可以使用Homebrew安装:

    1brew install jq 2 3

三、常用jq用法

以下是jq的一些常见用法。

1. 读取属性值

要从输入的JSON对象中提取属性值,可以使用.操作符。

举例:有一个名为sample.json的文件,内容如下:

1{ 2 "name": "Alice", 3 "age": 30, 4 "city": "New York" 5} 6 7

提取名字:

1cat sample.json | jq '.name' 2 3

输出结果:

1"Alice" 2 3

2. 过滤数组元素

要对数组元素进行过滤,可以使用[]操作符。

举例:有一个名为students.json的文件,内容如下:

1[ 2 { 3 "name": "Alice", 4 "age": 30, 5 "city": "New York" 6 }, 7 { 8 "name": "Bob", 9 "age": 25, 10 "city": "San Francisco" 11 }, 12 { 13 "name": "Charlie", 14 "age": 23, 15 "city": "Los Angeles" 16 } 17] 18 19

提取所有名字:

1cat students.json | jq '.[].name' 2 3

输出结果:

1"Alice" 2"Bob" 3"Charlie" 4 5

3. 选择特定数组元素

如果要返回具有某些属性的特定元素,则可以使用选择器。例如,要选择年龄超过25岁的学生:

1cat students.json | jq '.[] | select(.age > 25)' 2 3

输出结果:

1{ 2 "name": "Alice", 3 "age": 30, 4 "city": "New York" 5} 6 7

4. 排序和唯一化数组

可以使用sort,sort_by()unique函数对数组进行操作。

例如,对来自sample-array.json文件的年龄进行排序和去重:

1[30, 20, 25, 30, 25, 20] 2 3

排序且去重:

1cat sample-array.json | jq 'unique | sort' 2 3

输出结果:

1[ 2 20, 3 25, 4 30 5] 6 7

5. 修改数据

除了筛选和查询,jq还支持创建和修改数据。例如,为students.json中的每个学生添加 “isActive” 属性:

1cat students.json | jq '.[] | {name, age, city, isActive: true}' 2 3

输出结果:

1{ 2 "name": "Alice", 3 "age": 30, 4 "city": "New York", 5 "isActive": true 6} 7{ 8 "name": "Bob", 9 "age": 25, 10 "city": "San Francisco", 11 "isActive": true 12} 13{ 14 "name": "Charlie", 15 "age": 23, 16 "city": "Los Angeles", 17 "isActive": true 18} 19 20

四、总结

jq是个非常强大的命令行JSON处理工具,支持各种数据操作功能,能够帮助你在处理JSON数据时更加便捷和高效。本文列举了一些常用的jq使用案例,但jq的功能远不止于此。更多丰富的功能可以在官方文档(点击查看)中找到。 熟练掌握jq有助于提高命令行处理JSON数据的能力,为其它处理和分析工具提供更方便的数据源。

作者:京东物流 张涛

来源:京东云开发者社区 自猿其说Tech 转载请注明来源

点赞
收藏

评论区

加载中...

相关推荐

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

java与unity3d通信之json

java与unity3d项目中用的json作为基础通信的数据格式,java后端,json库那是一个泛滥,一直喜欢阿里的fastjson,强大、快速、容易上手。Unity用的最新版本,其自带的json库感觉太弱了,于是在网上找了个Newtonsoft.Json库,这个在C上用的比较多吧,不过粗略使用,不得不感叹,C处理json弱爆了,当然,可能是很强大

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )

Newtonsoft.Json的使用整理

关于我引言json是我们在工作中经常用到的一种数据传输格式,开始过程中解析json是我们经常面对的问题。NewtonsoftJson是c的一套json处理封装类,它可以高效,方便地帮助我们处理json。NetonSoftJson提供了完整的使用文档,文档地址如下:NetonSoftJson的不同使用场景常用方法序列化和反序列化这应该是我们最常用的俩

MySQL Json函数(5.7以上)

oraclemysql5.7.8之后增加了对json数据格式的函数处理,可更加灵活的在数据库中操作json数据,如可变属性、自定义表单等等都使用使用该方式解决。在创建表时,可以使用“GENERATEDALWAYSAS”与json中的某个字段关联,并创建虚拟字段使json字符串也可以添加索引。创建测试json表

Golang之如何(优雅的)比较两个未知结构的json

这是之前遇到的一道面试题,后来也确实在工作中实际遇到了。于是记录一下,如何(优雅的)比较两个未知结构的json。假设,现在有两个简单的json文件。{"id":1,"name":"testjson01","isadmin":true}{"isadmi