如何使用 jq 访问具有不同命名键的对象中的 json 值
How to access a json value within an object that has different named keys with jq
我有这样的数据:
{
"Object0" : {
"data01" : "value01",
"data02" : "value02",
"data03" : "value03",
"data04" : "value04"
},
"Object1" : {
"data11" : "value11",
"data12" : "value12",
"data13" : "value13",
"data14" : "value14"
},
"variables": {
"variable1": {
"isSecret": null,
"value": "value1"
},
"variable2": {
"isSecret": null,
"value": "value2"
},
"variable3": {
"isSecret": null,
"value": "value3"
},
"variable4": {
"isSecret": null,
"value": "value4"
}
}
}
我正在尝试使用 jq 获取变量名和值。我想要以任何形式的结构化数据将两者链接在一起的输出。 look/function 类似于:
varible1,value1
varible2,value2
varible3,value3
varible4,value4
可以是 json、csv 或 tsv。有什么都好。
现在我只能通过以下方式获取变量名:
$ cat data.json | jq -r '.variables | keys[]'
variable1
variable2
variable3
variable4
我还能够开始创建 json key/value 对:
$ cat data.json | jq -r '{(.variables | keys[]):"42"}'
{
"variable1": "42"
}
{
"variable2": "42"
}
{
"variable3": "42"
}
{
"variable4": "42"
}
但我仍然无法访问这些甜蜜的价值观。
我一直在通读手册页,并尝试使用递归、遍历、foreach、递归下降和其他一些方法。我没有意识到 jq 有多强大!它现在是我最喜欢的 bash 实用程序之一。但我仍然有这个问题。任何人都可以阐明这一点吗?
使用to_entries
:
jq -r '.variables | to_entries[] | [ .key, .value.value ] | @csv'
使用keys
:
jq -r '.variables | keys[] as $k | [ $k, .[$k].value ] | @csv'
我有这样的数据:
{
"Object0" : {
"data01" : "value01",
"data02" : "value02",
"data03" : "value03",
"data04" : "value04"
},
"Object1" : {
"data11" : "value11",
"data12" : "value12",
"data13" : "value13",
"data14" : "value14"
},
"variables": {
"variable1": {
"isSecret": null,
"value": "value1"
},
"variable2": {
"isSecret": null,
"value": "value2"
},
"variable3": {
"isSecret": null,
"value": "value3"
},
"variable4": {
"isSecret": null,
"value": "value4"
}
}
}
我正在尝试使用 jq 获取变量名和值。我想要以任何形式的结构化数据将两者链接在一起的输出。 look/function 类似于:
varible1,value1
varible2,value2
varible3,value3
varible4,value4
可以是 json、csv 或 tsv。有什么都好。
现在我只能通过以下方式获取变量名:
$ cat data.json | jq -r '.variables | keys[]'
variable1
variable2
variable3
variable4
我还能够开始创建 json key/value 对:
$ cat data.json | jq -r '{(.variables | keys[]):"42"}'
{
"variable1": "42"
}
{
"variable2": "42"
}
{
"variable3": "42"
}
{
"variable4": "42"
}
但我仍然无法访问这些甜蜜的价值观。
我一直在通读手册页,并尝试使用递归、遍历、foreach、递归下降和其他一些方法。我没有意识到 jq 有多强大!它现在是我最喜欢的 bash 实用程序之一。但我仍然有这个问题。任何人都可以阐明这一点吗?
使用to_entries
:
jq -r '.variables | to_entries[] | [ .key, .value.value ] | @csv'
使用keys
:
jq -r '.variables | keys[] as $k | [ $k, .[$k].value ] | @csv'