迭代键以获取键的内容

iterate on key to get the contents of the key

如果我 json 看起来像

{
    "items": [
        {
            "name": "issue1",
            "spec": {
                "config": {
                    "setting1": abc,
                    "setting2": {
                        "name": "xyz"
                    }
                },
                "files": {
                    "name": "cde",
                    "path": "/home"
                },
                "program": {
                    "name": "apache"
                }
            }
        }
    ]
}

并且我想在 .items[0].spec 处进行迭代,其中可以显示关键配置、文件、程序的内容。类似

config:
{
    "setting1": abc,
    "setting2": {
        "name": "xyz"
    }
}

files:
{
    "name": "cde",
    "path": "/home"
}

program:
{
    "name": "apache"
}

每件商品可能多于或少于config/files/programs。

我知道我可以通过 jq -r '.items[0].spec| to_entries[].key' 获取键列表,但不确定是否像上面那样格式化输出和获取 .items[].spec.xxxxx 的内容。

我也很接近 jq -r '{test: .items[0].spec | with_entries(select(.value != null)) }' 但我想按键分隔每个项目

这也让我离得更近了!但是如何让对象的 json 语法显示为未压缩的?

jq -r '.items[].spec | keys[] as $k | "\($k):\n \(.[$k])"'

“,”运算符似乎是您正在寻找的神奇成分:

.items[].spec | keys[] as $k | $k, .[$k]