jq - 处理json串

简介

主要在linux中,对json串进行美化和取值,我经常用在shell里


json串美化

[root@master ~]# echo '{"name":"vick","age":19}' | jq
{
  "name": "vick",
  "age": 19
}

取值

取kv对

# 取一个
[root@master ~]# echo '{"name":"vick","age":19}' | jq '.name'
"vick"

# 取多个
[root@master ~]# echo '{"name":"vick","age":19}' | jq '.name,.age'
"vick"
19

取所有key

# map结构取出结果是keys
[root@master ~]# echo '{"name":"vick","age":19}' | jq keys
[
  "age",
  "name"
]

# list结构取出结果是索引
[root@master ~]# echo '[1,2,3,4,5]' | jq keys
[
  0,
  1,
  2,
  3,
  4
]

取list

[root@master ~]# echo '[1,2,3,4,5]' | jq .[]
1
2
3
4
5

多个过滤器

[root@master ~]# echo '[{"name":"Tom"},{"name":"Tim"}]' | jq .[]
{
  "name": "Tom"
}
{
  "name": "Tim"
}

# 递进取值
[root@master ~]# echo '[{"name":"Tom"},{"name":"Tim"}]' | jq '.[] | .name'
"Tom"
"Tim"

判断取值

[root@master ~]# echo '[1,2,3,4,5]' | jq 'map(select (. >= 3))'
[
  3,
  4,
  5
]

判断输出

[root@master ~]# echo $?|jq 'if . == 0 then "ok" elif . == 1 then "1" else "err" end'
"err"

计算

[root@master ~]# echo '[1,2,3,4,5]' | jq 'map(.+1)'
[
  2,
  3,
  4,
  5,
  6
]

格式化输出

# 直接取值
[root@master ~]# echo '"Tim"' | jq '"my name is \(.)"'
"my name is Tim"

# map取值
[root@master ~]# echo '{"name":"vick"}' | jq '"my name is \(.name)"'
"my name is vick"
posted @ 2024-06-13 08:38  难德糊涂  阅读(279)  评论(0)    收藏  举报