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的发行版上:

    arduino 复制代码
    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的文件,内容如下:

json 复制代码
{
  "name": "Alice",
  "age": 30,
  "city": "New York"
}

提取名字:

bash 复制代码
cat sample.json | jq '.name'

输出结果:

arduino 复制代码
"Alice"

2. 过滤数组元素

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

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

css 复制代码
[  {    "name": "Alice",    "age": 30,    "city": "New York"  },  {    "name": "Bob",    "age": 25,    "city": "San Francisco"  },  {    "name": "Charlie",    "age": 23,    "city": "Los Angeles"  }]

提取所有名字:

bash 复制代码
cat students.json | jq '.[].name'

输出结果:

arduino 复制代码
"Alice"
"Bob"
"Charlie"

3. 选择特定数组元素

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

scss 复制代码
cat students.json | jq '.[] | select(.age > 25)'

输出结果:

json 复制代码
{
  "name": "Alice",
  "age": 30,
  "city": "New York"
}

4. 排序和唯一化数组

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

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

csharp 复制代码
[30, 20, 25, 30, 25, 20]

排序且去重:

bash 复制代码
cat sample-array.json | jq 'unique | sort'

输出结果:

css 复制代码
[  20,  25,  30]

5. 修改数据

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

bash 复制代码
cat students.json | jq '.[] | {name, age, city, isActive: true}'

输出结果:

json 复制代码
{
  "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 转载请注明来源

相关推荐
ningqw6 小时前
SpringBoot 常用跨域处理方案
java·后端·springboot
你的人类朋友6 小时前
vi编辑器命令常用操作整理(持续更新)
后端
胡gh7 小时前
简单又复杂,难道只能说一个有箭头一个没箭头?这种问题该怎么回答?
javascript·后端·面试
一只叫煤球的猫8 小时前
看到同事设计的表结构我人麻了!聊聊怎么更好去设计数据库表
后端·mysql·面试
uzong8 小时前
技术人如何对客做好沟通(上篇)
后端
颜如玉8 小时前
Redis scan高位进位加法机制浅析
redis·后端·开源
Moment9 小时前
毕业一年了,分享一下我的四个开源项目!😊😊😊
前端·后端·开源
why技术9 小时前
在我眼里,这就是天才般的算法!
后端·面试
绝无仅有9 小时前
Jenkins+docker 微服务实现自动化部署安装和部署过程
后端·面试·github
程序视点9 小时前
Escrcpy 3.0投屏控制软件使用教程:无线/有线连接+虚拟显示功能详解
前端·后端