写点什么

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

  • 2023-10-16
    北京
  • 本文字数:1380 字

    阅读完需:约 5 分钟

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


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

发布于: 刚刚阅读数: 6
用户头像

拥抱技术,与开发者携手创造未来! 2018-11-20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
jq工具及其常用用法 | 京东物流技术团队_json_京东科技开发者_InfoQ写作社区