linux - jq命令使用方法记录

jq命令,用于shell解析json格式数据。

输出value时不带引号

输出raw string,而非json格式

jq -r .info.a

示例:

[root@node1 ~]# cat test 
{
  "a": "aaa",
  "b": "bbb"
}
[root@node1 ~]# cat test | jq .a
"aaa"
[root@node1 ~]# cat test | jq -r .a
aaa

查看数组长度

#example:
#可用于遍历数组时的下标
jq '.info.block_device_mappings.DiskDeviceMapping | length'

key中存在特数字符时获取value

当key中有特殊字符时,直接获取会报错。如下: 

[root@node1 ~]# cat test
{
  "a-b": "aaa",
  "b": "bbb"
}
[root@node1 ~]# cat test | jq .a-b
jq: error: b/0 is not defined at , line 1:
.a-b   
jq: 1 compile error

正确方法:

jq 'to_entries| .[]| select(.key == "a-b")| .value'
[root@node1 ~]# cat test
{
  "a-b": "aaa",
  "b": "bbb"
}
[root@node1 ~]# cat test | jq 'to_entries| .[]| select(.key == "a-b")| .value'
"aaa"

使用变量代替key:

需要使用'单引号'引用变量

[root@node1 ~]# keyValue="a-b"
[root@node1 ~]# cat test
{
  "a-b": "aaa",
  "b": "bbb"
}
[root@node1 ~]# cat test | jq 'to_entries| .[]| select(.key == "'${keyValue}'")| .value'
"aaa"

你可能感兴趣的:(#,Linux命令,linux,运维)