jq-json数据过滤命令

jq是一款命令行下处理json数据的工具,可以接受标准输入、命令行管道或文件中的json数据。经过过滤器和表达式的转换输出我们需要的数据

安装

官方GitHub地址

CentOS安装

yum install -y epel-release
yum install -y jq

Ubuntu安装

apt update
apt install -y jq

使用

常用选项

-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参数,而不是文件;
-- 终止参数处理;
[root@TEST-02 ~]# echo '{"name":"voidking"}' | jq .
{
  "name": "voidking"
}
[root@TEST-02 ~]# echo '{"name":"voidking"}' | jq .name
"voidking"
[root@TEST-02 ~]# echo '{"name":"voidking"}' | jq -r .name
voidking
[root@TEST-02 ~]# echo '{"name":{"firstname":"Void","lastname":"King"}}' | jq .name.firstname
"Void"
[root@TEST-02 ~]# echo '{"name":{"firstname":"Void","lastname":"King"}}' | jq  -r .name.firstname
Void
[root@TEST-02 ~]# echo '{"name":{"firstname":"Void","lastname":"King"}}' | jq '.name | .firstname'
"Void"
[root@TEST-02 ~]# echo '{"name":{"firstname":"Void","lastname":"King"}}' | jq '.name | .firstname,.lastname'
"Void"
"King"

[root@TEST-02 ~]# echo '[{"firstname":"Void","lastname":"King"},{"firstname":"Hao","lastname":"Jin"}]' | jq '.[] | .firstname,.lastname' | sed -n "N;s/\n/ /p"
"Void" "King"
"Hao" "Jin"


[root@TEST-02 ~]# echo '[{"firstname":"Void","lastname":"King"},{"firstname":"Hao","lastname":"Jin"}]' | jq .
[
  {
    "firstname": "Void",
    "lastname": "King"
  },
  {
    "firstname": "Hao",
    "lastname": "Jin"
  }
]

[root@TEST-02 ~]# echo '[{"firstname":"Void","lastname":"King"},{"firstname":"Hao","lastname":"Jin"}]' | jq -c .
[{"firstname":"Void","lastname":"King"},{"firstname":"Hao","lastname":"Jin"}]


# .[], .[]?, .[2], .[10:15]: 数组运算
echo '[{"name":"JSON", "good":true}, {"name":"XML", "good":false}]' | jq '.[1]'
{
  "name": "XML",
  "good": false
}

# [], {}: 构造一个数组/对象

echo '{"user":"stedolan","titles":["JQ Primer", "More JQ"]}' | jq '{user, title: .titles[]}'
{
  "user": "stedolan",
  "title": "JQ Primer"
}
{
  "user": "stedolan",
  "title": "More JQ"
}


参考链接1 参考链接2

最后更新于