jq工具及其常用用法

张春  金牌会员 | 2023-11-3 05:18:53 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 683|帖子 683|积分 2049

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

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

  • 基于流式处理,适用于大型JSON数据文件。
  • 提供了丰富的操作符和函数,与 Unix 的管道(pipe)和 I/O 重定向兼容。
  • 支持条件过滤、字符串操作、数学运算和自定义函数等高级功能。
二、安装jq

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

  • 在基于Debian的发行版上:
    1. sudo apt-get install jq
    复制代码
  • 在基于RHEL的发行版上:
    1. sudo yum install jq
    复制代码
  • 在Arch Linux上:
    1. sudo pacman -S jq
    复制代码
  • 在macOS上,可以使用Homebrew安装:
    1. brew install jq
    复制代码
三、常用jq用法

以下是jq的一些常见用法。
1. 读取属性值

要从输入的JSON对象中提取属性值,可以使用.操作符。
举例:有一个名为sample.json的文件,内容如下:
  1. {
  2.   "name": "Alice",
  3.   "age": 30,
  4.   "city": "New York"
  5. }
复制代码
提取名字:
  1. cat sample.json | jq '.name'
复制代码
输出结果:
  1. "Alice"
复制代码
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. ]
复制代码
提取所有名字:
  1. cat students.json | jq '.[].name'
复制代码
输出结果:
  1. "Alice"
  2. "Bob"
  3. "Charlie"
复制代码
3. 选择特定数组元素

如果要返回具有某些属性的特定元素,则可以使用选择器。例如,要选择年龄超过25岁的学生:
  1. cat students.json | jq '.[] | select(.age > 25)'
复制代码
输出结果:
  1. {
  2.   "name": "Alice",
  3.   "age": 30,
  4.   "city": "New York"
  5. }
复制代码
4. 排序和唯一化数组

可以使用sort,sort_by()和unique函数对数组进行操作。
例如,对来自sample-array.json文件的年龄进行排序和去重:
  1. [30, 20, 25, 30, 25, 20]
复制代码
排序且去重:
  1. cat sample-array.json | jq 'unique | sort'
复制代码
输出结果:
  1. [
  2.   20,
  3.   25,
  4.   30
  5. ]
复制代码
5. 修改数据

除了筛选和查询,jq还支持创建和修改数据。例如,为students.json中的每个学生添加 “isActive” 属性:
  1. cat students.json | jq '.[] | {name, age, city, isActive: true}'
复制代码
输出结果:
  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. }
复制代码
四、总结

jq是个非常强大的命令行JSON处理工具,支持各种数据操作功能,能够帮助你在处理JSON数据时更加便捷和高效。本文列举了一些常用的jq使用案例,但jq的功能远不止于此。更多丰富的功能可以在官方文档(点击查看)中找到。 熟练掌握jq有助于提高命令行处理JSON数据的能力,为其它处理和分析工具提供更方便的数据源。
作者:京东物流 张涛
来源:京东云开发者社区 自猿其说Tech 转载请注明来源

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

张春

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表