【发布时间】:2022-11-21 18:02:02
【问题描述】:
在 Python 中,我有一个字典列表,我想从列表中的每个字典中删除给定的节点。我对这些词典一无所知,除了它们都具有相同(未知)的模式。要删除的节点可以在字典中的任何位置,它由 JSONPath 表达式指定。
例子:
输入数据:
[
{ "top": { "lower": 1, "other": 1 } },
{ "top": { "lower": 2, "other": 4 } },
{ "top": { "lower": 3, "other": 9 } }
]
待移除节点:$.*.top.lower
预期结果:
[
{ "top": { "other": 1 } },
{ "top": { "other": 4 } },
{ "top": { "other": 9 } }
]
使用 jsonpath 库我的第一次尝试是这样的:
from jsonpath import JSONPath
def remove_node_from_dict(data, node):
node_key = JSONPath(node).segments.pop()
for record in data:
del record[node_key]
但这仅在要删除的节点位于字典的顶层时才有效。
在研究解决方案时,我遇到了 jsonpath-ng 库,它声称具有“更新或删除树中节点的能力”。但是,我找不到关于此的任何文档 - 它是如何完成的?
编辑:
基于this 对相关问题的回答,我找到了一个解决方案,该解决方案至少适用于使用普通 Python(不是 jsonpath-ng 库)的简单路径(无过滤器等)。这对我的用例来说就足够了。我仍然想学习如何以更通用的方式使用 jsonpath-ng 进行操作。
【问题讨论】:
标签: python jsonpath jsonpath-ng