如何使用 jq 从 json 输出所有键和值?

how to output all the keys and values from json using jq?

我正在尝试从我的 json 文件中取出所有与值“data10=true”相匹配的数据,它这样做了,但只抓取了名称,我该怎么做才能将所有内容输出到我的 json 文件包含与“data10=true”相匹配的任何内容?

这就是我得到的 data=$(jq -c 'to_entries[] | select (.value.data10 == "true")| [.key, .value.name]' data.json )

顺便说一句,这是在我的 YAML 模板中,运行它作为 devops 中的管道。

详细要求不清楚,但希望您能够使用以下 jq 程序作为指南:

..
| objects
| select( .data10 == "true" )
| to_entries[]
| select(.key != "data10")
| [.key, .value]

这将递归地(感谢初始 ..)检查输入中的所有 JSON 对象。

p.s.

如果您想根据 .data10 是 "true" 还是 true 进行选择,您可以将标准更改为 .data10 | . == true or . == "true"

jq 'to_entries | map(select(.value.data10=="true")) | from_entries' data.json

输入data.json, false 值:

{
  "FOO": {
    "data10": "false",
    "name": "Donald",
    "location": "Stockholm"
  },
  "BAR": {
    "data10": "true",
    "name": "Walt",
    "location": "Stockholm"
  },
  "BAZ": {
    "data10": "true",
    "name": "Jack",
    "location": "Whereever"
  }
}

输出:

{
  "BAR": {
    "data10": "true",
    "name": "Walt",
    "location": "Stockholm"
  },
  "BAZ": {
    "data10": "true",
    "name": "Jack",
    "location": "Whereever"
  }
}

基于: