[英]jq flatten a deeply nested json document
考虑以下深度嵌套的 json object
[
{
"level1key": "level1value",
"children": [
{
"level2key": "level2value1",
"children": [
{
"level3key1": "ignored",
"level3key2": "ignored",
"level3key3": [
{
"level4key": "ignored"
}
]
},
{
"level3key1": "level3value1",
"level3key2": "level3value22",
"level3key3": [
{
"level4key": "level4value1"
}
]
},
{
"level3key1": "level3value2",
"level3key2": "level3value22",
"level3key3": [
{
"level4key": "level4value2"
}
]
}
]
},
{
"level2key": "level2value2",
"children": [
{
"level3key1": "ignored",
"level3key2": "ignored",
"level3key3": [
{
"level4key": "ignored"
}
]
},
{
"level3key1": "level3value3",
"level3key2": "level3value22",
"level3key3": [
{
"level4key": "level4value3"
}
]
},
{
"level3key1": "level3value4",
"level3key2": "level3value22",
"level3key3": [
{
"level4key": "level4value4"
}
]
}
]
}
]
}
]
我需要在.[0].children[].children[].level3key2
level3key2 处按“level3value22”进行过滤,并将这个深度嵌套的 json object 展平为一个数组。 预期结果如下。 jq句子应该怎么写?
[
{
"v1": "level1value",
"v2": "level2value1",
"v3": "level3value1",
"v4": "level4value1"
},
{
"v1": "level1value",
"v2": "level2value1",
"v3": "level3value2",
"v4": "level4value2"
},
{
"v1": "level1value",
"v2": "level2value2",
"v3": "level3value3",
"v4": "level4value3"
},
{
"v1": "level1value",
"v2": "level2value2",
"v3": "level3value4",
"v4": "level4value4"
}
]
提前致谢!
我不确定我是否正确理解了您想要实现的目标,但这至少适用于您的示例数据:
[
.[0] | [.level1key] + (
.children[] | [.level2key] + (
.children[] | select(.level3key2 == "level3value22") | [.level3key1] + (
.level3key3[] | [.level4key]
)
)
)
| with_entries(.key |= "v\(. + 1)")
]
[
{
"v1": "level1value",
"v2": "level2value1",
"v3": "level3value1",
"v4": "level4value1"
},
{
"v1": "level1value",
"v2": "level2value1",
"v3": "level3value2",
"v4": "level4value2"
},
{
"v1": "level1value",
"v2": "level2value2",
"v3": "level3value3",
"v4": "level4value3"
},
{
"v1": "level1value",
"v2": "level2value2",
"v3": "level3value4",
"v4": "level4value4"
}
]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.