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

相关推荐
zb200641204 小时前
CVE-2024-38819:Spring 框架路径遍历 PoC 漏洞复现
java·后端·spring
uzong4 小时前
AI Agent 是什么,如何理解它,未来挑战和思考
人工智能·后端·架构
追逐时光者4 小时前
DotNetGuide突破了10K + Star,一份全面且免费的C#/.NET/.NET Core学习、工作、面试指南知识库!
后端·.net
yuweiade4 小时前
springboot和springframework版本依赖关系
java·spring boot·后端
ywf12154 小时前
springboot设置多环境配置文件
java·spring boot·后端
小马爱打代码4 小时前
SpringBoot + 消息生产链路追踪 + 耗时分析:从创建到发送,全链路性能可视化
java·spring boot·后端
小码哥_常5 小时前
MyBatis批量插入:从5分钟到3秒的逆袭之路
后端
烛之武6 小时前
SpringBoot基础
java·spring boot·后端
橙序员小站6 小时前
Harness Engineering:从 OpenClaw 看 AI 助理的基础设施建设
后端·aigc·openai
小陈工7 小时前
2026年3月28日技术资讯洞察:5G-A边缘计算落地、低延迟AI推理革命与工业智造新范式
开发语言·人工智能·后端·python·5g·安全·边缘计算