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

京东云开发者
• 阅读 352

近来在工作中处理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的发行版上:

    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 转载请注明来源

点赞
收藏
评论区
推荐文章
kenx kenx
3年前
SpringBoot 默认json解析器详解和字段序列化自定义
前言在我们开发项目API接口的时候,一些没有数据的字段会默认返回NULL,数字类型也会是NULL,这个时候前端希望字符串能够统一返回空字符,数字默认返回0,那我们就需要自定义json序列化处理SpringBoot默认的json解析方案我们知道在springboot中有默认的json解析器,SpringBoot中默认使用的Json解析技术框架是ja
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
java与unity3d通信之json
java与unity3d项目中用的json作为基础通信的数据格式,java后端,json库那是一个泛滥,一直喜欢阿里的fastjson,强大、快速、容易上手。Unity用的最新版本,其自带的json库感觉太弱了,于是在网上找了个Newtonsoft.Json库,这个在C上用的比较多吧,不过粗略使用,不得不感叹,C处理json弱爆了,当然,可能是很强大
happlyfox happlyfox
3年前
Newtonsoft.Json的使用整理
关于我引言json是我们在工作中经常用到的一种数据传输格式,开始过程中解析json是我们经常面对的问题。NewtonsoftJson是c的一套json处理封装类,它可以高效,方便地帮助我们处理json。NetonSoftJson提供了完整的使用文档,文档地址如下:NetonSoftJson的不同使用场景常用方法序列化和反序列化这应该是我们最常用的俩
Wesley13 Wesley13
3年前
MySQL Json函数(5.7以上)
oraclemysql5.7.8之后增加了对json数据格式的函数处理,可更加灵活的在数据库中操作json数据,如可变属性、自定义表单等等都使用使用该方式解决。在创建表时,可以使用“GENERATEDALWAYSAS”与json中的某个字段关联,并创建虚拟字段使json字符串也可以添加索引。创建测试json表
Stella981 Stella981
3年前
Golang之如何(优雅的)比较两个未知结构的json
这是之前遇到的一道面试题,后来也确实在工作中实际遇到了。于是记录一下,如何(优雅的)比较两个未知结构的json。假设,现在有两个简单的json文件。{"id":1,"name":"testjson01","isadmin":true}{"isadmi
Stella981 Stella981
3年前
Gson之实例五
前面四篇博客基本上可以满足我们处理的绝大多数需求,但有时项目中对json有特殊的格式规定.比如下面的json串解析:{"tableName":"students","tableData":{"id":1,"name":"李坤","birthDay":"Jun 22, 2012 9:54:49 PM"},{"id":2,"name":"曹贵生"
Stella981 Stella981
3年前
FastJson 反序列化注意事项
问题描述使用fastJson对json字符串进行反序列化时,有几个点需要注意一下:反序列化内部类反序列化模板类0\.Getter/Setter问题如我们希望返回的一个json串为"name":"name","isDeleted":true,"isEmpty":1
DevOpSec DevOpSec
2年前
linux shell json解析命令 jq 简介
jq简介jq可以对json数据进行分片、过滤、映射和转换,和sed、awk、grep等命令一样,都可以让你轻松地把玩文本。它能轻松地把你拥有的数据转换成你期望的格式,而且需要写的程序通常也比你期望的更加简短。jq是用C编写,没有运行时
使用Python和XPath解析动态JSON数据
JSON动态数据在Python中扮演着重要的角色,为开发者提供了处理实时和灵活数据的能力。Python作为一种强大的编程语言,提供了丰富的工具和库来处理动态JSON数据使得解析和处理动态JSON数据变得简单和高效。例如,使用内置的json模块,我们可以轻松