如何使用 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'