开源是一种精神,分享是一种美德!

jq

相关命令:暂无相关命令
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)

暂无评论

评论

名字:
验证码:
获取验证码
内容: