[linux命令] jq - JSON处理
jq可以对json数据进行分片、过滤、映射、转换,jq可以像sed、awk、grep等命令一样轻松的处理文本;jq使用c语言编写,没有运行时依赖,可以下载预编译的二进制文件复制到远程机器上运行;使用jq可轻松的将现有的数据格式转换为你想要的数据格式。
一、用户手册
mac下安装
brew install jq
二、使用示例
jq使用方法
jq [options] <jq filter> [file...]
其中,options为jq执行的参数,filter为过滤的符号,file为被执行对象(可同时执行多个对象),当不指定文件时,以命令行用户输入作为jq输入。
2.1 jq执行参数(options)
参数 | 功能 | 范例 |
---|---|---|
-c | 将输出按压缩格式展示(默认情况下按JSON格式化展示) | jq -c . test.txt |
-C | 将输出按带颜色的JSON格式化展示或到管道 | jq -C . test.txt |
-M | 禁止输出按带颜色的JSON格式化展示或到管道 | jq -M . test.txt |
-S | 按JSON字段的顺序输出 | jq -S . test.txt |
全部参数见用户操作手册
2.2 jq过滤功能
“.” : 输出自己,搭配"[]“可处理数组元素,”[n1:n2]"指定输出数组的范围,也可根据JSON多层结果做级联处理。
MacBook-Pro-6:test jerry$ jq -c . test.txt [{"name":"JSON","good":true},{"name":"XML","good":false}] MacBook-Pro-6:test jerry$ jq .[] test.txt { "name": "JSON", "good": true } { "name": "XML", "good": false } MacBook-Pro-6:test jerry$ jq .[1:2] test.txt [ { "name": "XML", "good": false } ] MacBook-Pro-6:test jerry$ jq .[1] test.txt { "name": "XML", "good": false } MacBook-Pro-6:test jerry$ jq .[1].name test.txt "XML" MacBook-Pro-6:test jerry$
“,” : 可对输入执行多个过滤条件并输出结果
MacBook-Pro-6:test jerry$ jq -c . test2.txt {"user":"stedolan","projects":["jq","wikiflow"]} MacBook-Pro-6:test jerry$ jq '.user, .projects[1]' test2.txt "stedolan" "wikiflow"
“|” : 管道可像Unix管道一样,将管道左侧的输出作为管道右侧的输入,当管道左侧有多个输出时,会按顺序依次执行管道右侧的命令
MacBook-Pro-6:test jerry$ jq -c '.' test.txt [{"name":"JSON","good":true},{"name":"XML","good":false}] MacBook-Pro-6:test jerry$ jq '.[] | .name' test.txt "JSON" "XML"
“()” : 组合操作符
MacBook-Pro-6:test jerry$ jq '(. + 3) * 2' 1 8
2.3 类型和值
“[]” : 构建数组
MacBook-Pro-6:test jerry$ jq -c '.' test2.txt {"user":"stedolan","projects":["jq","wikiflow"]} MacBook-Pro-6:test jerry$ jq '[.user, .projects[1]]' test2.txt [ "stedolan", "wikiflow" ]
“{}” : 构建对象
MacBook-Pro-6:test jerry$ jq -c '.' test2.txt {"user":"stedolan","projects":["jq","wikiflow"]} MacBook-Pro-6:test jerry$ jq '{A : .user, B : .projects[]}' test2.txt { "A": "stedolan", "B": "jq" } { "A": "stedolan", "B": "wikiflow" }
2.4 内建函数
“keys” : 应用于对象时,返回对象中的key组合,按字母顺序排列;应用于数组时,返回数组中对象的下标。
MacBook-Pro-6:test jerry$ jq -c '.' test.txt [{"name":"JSON","good":true},{"name":"XML","good":false}] MacBook-Pro-6:test jerry$ jq 'keys' test.txt [ 0, 1 ] MacBook-Pro-6:test jerry$ jq '.[1] | keys' test.txt [ "good", "name" ]
“has(key)” : 应用于对象时,返回对象是否有指定key;应用于数组时,返回是否有指定下标。
MacBook-Pro-6:test jerry$ jq -c '.' test.txt [{"name":"JSON","good":true},{"name":"XML","good":false}] MacBook-Pro-6:test jerry$ jq '.[1] | has("name")' test.txt true MacBook-Pro-6:test jerry$ jq 'has(12)' test.txt false
“del(path_expression)” : 删除对象的指定key或数组的指定下标对象(不会对源文件进行删除)
MacBook-Pro-6:test jerry$ jq -c '.' test.txt [{"name":"JSON","good":true},{"name":"XML","good":false}] MacBook-Pro-6:test jerry$ jq 'del(.[].name)' test.txt [ { "good": true }, { "good": false } ] MacBook-Pro-6:test jerry$ jq 'del(.[1])' test.txt [ { "name": "JSON", "good": true } ]
更多内建函数见用户手册
2.5 条件和比较
略
2.6 正则表达式
略
赞 (0)