jqlang/jq 1.5 使用手册详解:JSON处理利器
jq Command-line JSON processor 项目地址: https://gitcode.com/gh_mirrors/jq/jq
什么是jq?
jq是一个轻量级且功能强大的命令行JSON处理器。它允许你以声明式的方式提取、转换和处理JSON数据,就像sed/awk/grep对文本的处理一样。jq的核心思想是"过滤器"——每个jq程序都是一个过滤器,它接收输入并产生输出。
基本概念
过滤器原理
在jq中,所有操作都是通过过滤器完成的。过滤器有以下特点:
- 每个过滤器都有输入和输出
- 可以组合多个过滤器形成处理管道
- 即使是简单的值(如"hello"或42)也是过滤器
- 操作符如加法会同时将输入传递给两个过滤器并组合结果
基本语法
jq的基本调用格式为:
jq [选项] 过滤器 [文件...]
如果未指定文件,jq将从标准输入读取JSON数据。
常用选项详解
jq提供了丰富的命令行选项来控制其行为:
输入控制
-n/--null-input
:不使用输入,以null作为输入-R/--raw-input
:不解析输入为JSON,每行作为字符串处理-s/--slurp
:将所有输入读取为单个数组
输出控制
-c/--compact-output
:紧凑输出(每行一个JSON对象)-r/--raw-output
:直接输出字符串内容(不带引号)-S/--sort-keys
:按键名排序输出对象字段-C/--color-output
:强制彩色输出--tab
:使用制表符缩进
变量传递
--arg name value
:传递字符串变量--argjson name JSON-text
:传递JSON编码的变量--slurpfile var file
:将文件内容作为数组绑定到变量
基础过滤器
身份过滤器 .
最简单的过滤器,原样输出输入内容。常用于格式化JSON:
echo '{"foo":42}' | jq '.'
对象访问 .foo
或 .["foo"]
访问对象的属性:
echo '{"foo":42}' | jq '.foo' # 输出42
echo '{"foo":42}' | jq '.["foo"]' # 同上
安全访问版本 .foo?
在属性不存在时不会报错。
数组索引 .[index]
访问数组元素(支持负索引和切片):
echo '[1,2,3]' | jq '.[0]' # 输出1
echo '[1,2,3]' | jq '.[-1]' # 输出3
echo '[1,2,3,4,5]' | jq '.[1:3]' # 输出[2,3]
展开操作 .[]
展开数组或对象的所有元素:
echo '[1,2,3]' | jq '.[]' # 输出1、2、3(三行)
echo '{"a":1,"b":2}' | jq '.[]' # 输出1、2(两行)
多表达式 expr1, expr2
依次执行多个表达式:
echo '{"a":1,"b":2}' | jq '.a, .b' # 输出1和2
管道操作 |
将一个过滤器的输出作为下一个的输入:
echo '[{"name":"Alice"},{"name":"Bob"}]' | jq '.[] | .name'
# 输出"Alice"和"Bob"
类型与值
jq支持JSON的所有数据类型:数字、字符串、布尔值、数组、对象和null。
数组构造 []
可以构造新数组:
echo '{"a":1,"b":2}' | jq '[.a, .b]' # 输出[1,2]
实用技巧
- 格式化JSON:最简单的用法是使用
.
过滤器美化JSON输出 - 提取字段:使用
.field
语法快速提取特定字段 - 处理数组:结合
[]
和管道可以方便地处理数组元素 - 多文件处理:jq可以同时处理多个输入文件
- 字符串输出:使用
-r
选项可以直接输出字符串内容(不带引号)
总结
jq是一个强大的JSON处理工具,通过组合简单的过滤器可以完成复杂的数据处理任务。掌握基础过滤器后,你可以逐步学习更高级的功能如条件表达式、函数定义、模块系统等,以应对更复杂的JSON处理需求。
jq Command-line JSON processor 项目地址: https://gitcode.com/gh_mirrors/jq/jq
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考