jqlang/jq 1.6 使用手册详解:JSON处理利器核心功能解析
【免费下载链接】jq Command-line JSON processor 项目地址: https://gitcode.com/gh_mirrors/jq/jq
一、jq核心概念与设计哲学
jq是一个轻量级且功能强大的命令行JSON处理器,其核心设计理念基于"过滤器"模式。理解这个基础概念是掌握jq的关键。
1.1 过滤器模型
在jq中,所有操作都被视为过滤器:
- 每个过滤器都接受输入并产生输出
- 内置过滤器可完成字段提取、类型转换等常见任务
- 过滤器可通过多种方式组合,形成处理管道
与传统的编程语言不同,jq中不需要显式的循环结构。例如要处理数组元素,只需将数组展开过滤器与后续操作连接即可。
1.2 文字也是过滤器
一个有趣但重要的认知是:在jq中,即使是简单的字面值如"hello"或42也是过滤器。它们忽略输入,始终产生固定的输出。这种统一的设计使得各种操作可以无缝组合。
二、基础过滤器详解
2.1 身份过滤器(.)
最简单的过滤器是点号(.),它原样返回输入数据。这在格式化JSON输出时特别有用:
echo '{"name":"John"}' | jq '.'
2.2 对象字段访问
访问对象字段有多种语法形式:
.foo # 简单字段访问
.["foo"] # 通用字段访问语法
.foo? # 安全访问,避免错误
示例对比:
# 常规访问
echo '{"name":"John"}' | jq '.name' # 输出:"John"
# 安全访问
echo '123' | jq '.name?' # 输出空而不是报错
2.3 数组操作
jq提供了完整的数组处理能力:
.[0] # 索引访问(支持负数索引)
.[1:3] # 切片操作
.[] # 展开数组元素
切片操作示例:
echo '[10,20,30,40]' | jq '.[1:3]' # 输出:[20,30]
echo '[10,20,30,40]' | jq '.[-2:]' # 输出:[30,40]
2.4 管道组合(|)
管道符号(|)是jq中最强大的组合方式:
.[] | .name # 先展开数组,再获取每个元素的name字段
三、高级功能与命令行选项
3.1 输入处理模式
jq提供多种输入处理方式:
-n # 无输入模式,用于生成数据
-s # 合并所有输入为数组
-R # 原始输入模式(非JSON)
生成数据示例:
jq -n '{id:1, name:"test"}' # 输出:{"id":1,"name":"test"}
3.2 输出控制选项
格式化输出选项:
-c # 紧凑输出(单行)
-r # 原始输出(去引号)
-S # 按键名排序输出
3.3 变量传递
jq支持多种变量传递方式:
--arg name value # 传递字符串变量
--argjson name value # 传递JSON变量
使用示例:
jq --arg user admin '.user=$user' input.json
四、实用技巧与最佳实践
4.1 安全访问模式
使用问号后缀可以避免因字段不存在而中断处理:
.user?.name? # 安全链式访问
4.2 多结果处理
某些过滤器会产生多个结果,理解这点很重要:
.[] | .name # 对数组每个元素输出.name
4.3 复杂查询示例
组合多个特性实现复杂查询:
# 计算价格平均值
jq '[.[].price] | add/length' data.json
五、总结
jq通过简洁的过滤器模型提供了强大的JSON处理能力。掌握基础过滤器、管道组合和各种命令行选项后,可以高效地处理各种JSON数据操作任务。对于常用操作,建议创建脚本或函数来简化重复工作。
记住jq的设计哲学:每个操作都是过滤器,组合过滤器就像连接管道一样自然。这种思维方式能帮助您更好地利用jq解决实际问题。
【免费下载链接】jq Command-line JSON processor 项目地址: https://gitcode.com/gh_mirrors/jq/jq
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



