mps*_*mps 5 bash recursion json key jq
通过特定标签/键从整个 JSON 中删除任意值的简单方法是什么?我的 JSON 可能具有任意深度,因此应以递归方式删除标签。
{
"root": [
{
"name": "blah 1",
"remove": [ 1, 2, 3 ],
"new list": [
{
"name": "blah 2",
"remove": null,
"new list": [
{
"name": "blah 3",
"remove": [
{
"name": "blah 4",
"new list": []
},
{
"name": "blah 5",
"new list": []
}
]
}
]
},
{
"name": "blah 6",
"new list": []
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
我想删除所有带有 label 的元素"remove",以便最终结果如下所示:
{
"root": [
{
"name": "blah 1",
"new list": [
{
"name": "blah 2",
"new list": [
{
"name": "blah 3"
}
]
},
{
"name": "blah 6",
"new list": []
}
]
}
]
}
Run Code Online (Sandbox Code Playgroud)
使用sed/awk会产生意想不到的结果(尤其是当有嵌套对象要删除时),因此它必须是像 jq 或类似的 JSON 感知实用程序。
还有一种简单的方法可以使用walk-path基于 UNIX 的实用程序来实现相同的目的jtc:
jtc -pw'<remove>l:' sample.json
Run Code Online (Sandbox Code Playgroud)
- 它将递归删除所有出现的 label "remove"。如果您想将更改直接应用到源文件 ( sample.json),则添加选项-f
jtcPS> 披露:我是用于 JSON 操作的 -shell cli 工具的创建者