jq 一个灵活的轻量级命令行JSON处理器
jq 是 stedolan 开发的一个轻量级的和灵活的命令行JSON处理器,源码请参考 jq 项目主页
jq 用于处理JSON输入,将给定过滤器应用于其JSON文本输入并在标准输出上将过滤器的结果生成为JSON。
最简单的过滤器是.,它将jq的输入未经修改地复制到其输出中(格式设置除外)。
请注意,jq 当前仅支持64位双精度浮点数(IEEE754)。
语法:
jq [options] <jq filter> [file...]
jq [options] --args <jq filter> [strings...]
jq [options] --jsonargs <jq filter> [JSON_TEXTS...]
选项:
-c 紧凑而不是漂亮的输出;
-n 使用`null`作为单个输入值;
-e 根据输出设置退出状态代码;
-s 将所有输入读取(吸取)到数组中;应用过滤器;
-r 输出原始字符串,而不是JSON文本;
-R 读取原始字符串,而不是JSON文本;
-C 为JSON着色;
-M 单色(不要为JSON着色);
-S 在输出上排序对象的键;
--tab 使用制表符进行缩进;
--arg a v 将变量$a设置为value<v>;
--argjson a v 将变量$a设置为JSON value<v>;
--slurpfile a f 将变量$a设置为从<f>读取的JSON文本数组;
--rawfile a f 将变量$a设置为包含<f>内容的字符串;
--args 其余参数是字符串参数,而不是文件;
--jsonargs 其余的参数是JSON参数,而不是文件;
-- 终止参数处理;
紧凑输出json数据 root@localhost src]# jq -c . test.json [{"lon":113.30765,"name":"广州市","code":"4401","lat":23.422825},{"lon":113.59446,"name":"韶关市","code":"4402","lat":24.80296}] [root@localhost src]# 根据输出结果设置命令退出状态码 [root@localhost src]# jq -c -e '.[0]|{names}|.names' test.json null [root@localhost src]# echo $? 1 [root@localhost src]# 读取所有输出到一个数组(也就是所在json数据最外层套一个数组) [root@localhost src]# echo '{"safd":"fsafd"}' | jq -r . { "safd": "fsafd" } [root@localhost src]# echo '{"safd":"fsafd"}' | jq -s . [ { "safd": "fsafd" } ] 输出原始字符串,而不是一个JSON格式 [root@localhost src]# echo '{"safd":"fsafd"}' | jq .[] "fsafd" [root@localhost src]# echo '{"safd":"fsafd"}' | jq -r .[] fsafd 单色显示 [root@localhost src]# echo '{"safd":"fsafd"}' | jq . { "safd": "fsafd" } [root@localhost src]# echo '{"safd":"fsafd"}' | jq -M . { "safd": "fsafd" } 排序对象 [root@localhost src]# jq . test.json [ { "lon": 113.30765, "name": "广州市", "code": "4401", "lat": 23.422825 }, { "lon": 113.59446, "name": "韶关市", "code": "4402", "lat": 24.80296 } ] [root@localhost src]# jq -S . test.json [ { "code": "4401", "lat": 23.422825, "lon": 113.30765, "name": "广州市" }, { "code": "4402", "lat": 24.80296, "lon": 113.59446, "name": "韶关市" } ] 以table缩进 [root@localhost src]# echo '{"safd":"fsafd"}' | jq --tab . { "safd": "fsafd" } 获取上面地理json数据里的name值 [root@localhost src]# jq '.[]|{name}' test.json { "name": "广州市" } { "name": "韶关市" } 获取第一个name值 [root@localhost src]# jq '.[0]|{name}' test.json { "name": "广州市" } 只打印出第一个map的值: [root@localhost src]# jq '.[0]|.[]' test.json 113.30765 "广州市" "4401" 23.422825 [root@localhost src]# 打印出一个map的name值 [root@localhost src]# jq '.[0]|.name' test.json "广州市" 打印出一个map的name值并已普通字符串显示 [root@localhost src]# jq -r '.[0]|.name' test.json 广州市
评论(0)
暂无评论