从匹配特定键的 JSON 中删除所有值
Posted
技术标签:
【中文标题】从匹配特定键的 JSON 中删除所有值【英文标题】:remove all values from JSON matching specific key 【发布时间】:2019-12-27 21:59:46 【问题描述】:通过特定标签/键从整个 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": []
]
]
我想删除标签为"remove"
的所有元素,这样最终的结果会是这样的:
"root": [
"name": "blah 1",
"new list": [
"name": "blah 2",
"new list": [
"name": "blah 3"
]
,
"name": "blah 6",
"new list": []
]
]
使用sed
/awk
会产生意想不到的结果(尤其是在要删除嵌套对象时),因此它必须是像 jq 或类似的 JSON 感知实用程序。
【问题讨论】:
【参考方案1】:还有一种简单的方法可以使用基于 walk-path
的 unix 实用程序 jtc
来实现相同目的:
jtc -pw'<remove>l:' sample.json
- 它将递归删除所有出现的标签"remove"
。如果您想将更改直接应用到源文件 (sample.json
),请添加选项 -f
PS> 披露:我是jtc
- 用于 JSON 操作的 shell cli 工具的创建者
【讨论】:
谢谢,下载了这个工具并让它与测试 .json 和我需要处理的真实文件一起工作【参考方案2】:这会在 jq 中得到想要的结果。
jq 'del(..|.remove?)'
【讨论】:
以上是关于从匹配特定键的 JSON 中删除所有值的主要内容,如果未能解决你的问题,请参考以下文章