迭代键以获取键的内容
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]
如果我 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]