Python:根据提供的路径更改json数据(例如jsonpath)

Python: change json data according to provided paths (e.g. jsonpath)

我需要一个工具来修改 json 数据,其中一些任意函数仅应用于以某种语法表示的特定路径(例如 jsonpath,但也可以是任何其他)。主要特点是修改现有数据结构,而不是只提取一些片段然后修改它。 有没有像我描述的那样?

例如我们得到了输入数据:

{
  "users": [
    {
      "group": "Admins", 
      "name": "John Smith"
    }, 
    {
      "group": "Users", 
      "name": "James Taylor"
    }
  ], 
  "groups": [ "Admins", "Users" ]
}

我想删除用户的姓氏。所以,我需要应用像这样的功能 lambda x: x.split(' ')[0] 到 json 路径 $.users..name

结果我想得到

{
  "users": [
    {
      "group": "Admins", 
      "name": "John"
    }, 
    {
      "group": "Users", 
      "name": "James"
    }
  ], 
  "groups": [ "Admins", "Users" ]
}

这是一个非常简单的示例,输入数据和路径表达式可能更复杂

我找到了使用 jsonpath-ng 的解决方案。

from jsonpath_ng import parse
input_data = json.load(file_with_json)
path = '$.users..name'
findings = parse(path).find(input_data)
for finding in findings:
    value = finding.full_path.find(input_data)[0].value
    some_new_value = value.split(' ')[0]
    finding.full_path.update(input_data, some_new_value)   

因此 input_data 将包含一个原始字典,但具有由 path

找到的更新值