Linux Command jq 格式转换
文章目录
1. 简介
jq
命令可以在命令行处理json数据
2. 参数
常用选项
-c 紧凑输出json数据 -e 根据输出结果设置命令退出状态码 -s 读取所有输入到一个数组 -r 输出原始字符串,而不是一个JSON格式 -C 高亮显示 -M 单色显示 -S 排序对象 --tab 使用tab缩进
3. 举例
紧凑输出json数据
$ jq -c . test.json [{"lon":113.30765,"name":"广州市","code":"4401","lat":23.422825},{"lon":113.59446,"name":"韶关市","code":"4402","lat":24.80296}]
根据输出结果设置命令退出状态码
$ jq -c -e '.[0]|{names}|.names' test.json null $ echo $? 1
读取所有输出到一个数组(也就是所在json数据最外层套一个数组)
$ echo '{"safd":"fsafd"}' | jq -r . { "safd": "fsafd" } $ echo '{"safd":"fsafd"}' | jq -s . [ { "safd": "fsafd" } ]
输出原始字符串,而不是一个JSON格式
$ echo '{"safd":"fsafd"}' | jq .[] "fsafd" $ echo '{"safd":"fsafd"}' | jq -r .[] fsafd
单色显示
$ echo '{"safd":"fsafd"}' | jq . { "safd": "fsafd" } $ echo '{"safd":"fsafd"}' | jq -M . { "safd": "fsafd" }
排序对象
$ jq . test.json [ { "lon": 113.30765, "name": "广州市", "code": "4401", "lat": 23.422825 }, { "lon": 113.59446, "name": "韶关市", "code": "4402", "lat": 24.80296 } ] $ jq -S . test.json [ { "code": "4401", "lat": 23.422825, "lon": 113.30765, "name": "广州市" }, { "code": "4402", "lat": 24.80296, "lon": 113.59446, "name": "韶关市" } ]
以table缩进
$ echo '{"safd":"fsafd"}' | jq --tab . { "safd": "fsafd" }
获取上面地理json数据里的name值
$ jq '.[]|{name}' test.json { "name": "广州市" } { "name": "韶关市" }
获取第一个name值
$ jq '.[0]|{name}' test.json { "name": "广州市" }
只打印出第一个map的值:
$ jq '.[0]|.[]' test.json 113.30765 "广州市" "4401" 23.422825
打印出一个map的name值
$ jq '.[0]|.name' test.json "广州市"
打印出一个map的name值并已普通字符串显示
$ jq -r '.[0]|.name' test.json 广州市