我有任意嵌套的 JSON 对象,类似于下面的内容。
{
"parent1" : "someval"`,
"parent2" : {
"a" : "someval",
"b" : "someval"
},
"parent3" : {
"child1" : {
"a" : "someval"
},
"child2" : {
"b" : "someval"
}
}
}
Run Code Online (Sandbox Code Playgroud)
我需要递归地遍历它们并检查是否有任何父项有子键a或b或两者,并生成该父项的 JSON 路径,如下所示:
Output:
parent2
parent3.child1
parent3.child2
Run Code Online (Sandbox Code Playgroud)
我尝试过使用
jq -r 'path(..) | map (. | tostring) | join (".")
Run Code Online (Sandbox Code Playgroud)
这可以帮助我生成所有路径,但我还没有找到一种方法来成功地组合诸如 之类的has("a")条件path。我怎样才能实现这一目标?
您可以使用index检查键是否在path数组中:
path(..) | select(index("a") or index("b")) | join(".")
Run Code Online (Sandbox Code Playgroud)
"parent2.a"
"parent2.b"
"parent3.child1.a"
"parent3.child2.b"
Run Code Online (Sandbox Code Playgroud)
如果您不需要最后一个键,可以添加[:-1]“删除”每个数组中的最后一个索引以输出:
path(..) | select(index("a") or index("b")) | join(".")
Run Code Online (Sandbox Code Playgroud)
"parent2.a"
"parent2.b"
"parent3.child1.a"
"parent3.child2.b"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
284 次 |
| 最近记录: |