使用 jsonpath-ng 在 Python 中使用上下文更新 json 数据

Update json data with context in Python using jsonpath-ng

关注 ,想知道如何在给定特定上下文的情况下更新 JSON 数据。 因此,假设我们选择了完全相同的 JSON 示例:

{
    "SchemeId": 10,
    "nominations": [
        {
            "nominationId": 1
        }
    ]
}

但是这一次,想要将原始值的值加倍,因此需要一些 lambda 函数来考虑当前节点值。

不需要 lambda;例如,要加倍 SchemeId,这样的事情应该可行:

data = json.loads("""the json string above""")
jsonpath_expr = parse('$.SchemeId')
jsonpath_expr.find(data)
val = jsonpath_expr.find(data)[0].value
jsonpath_expr.update(data, val*2)
print(json.dumps(data, indent=2))

输出:

{
  "SchemeId": 20,
  "nominations": [
    {
      "nominationId": 1
    }
  ]
}

这里是 lambda 表达式的例子:

import json
from jsonpath_ng import parse

settings = '''{
  "choices": {
    "atm": {
      "cs": "Strom",
      "en": "Tree"
    },
    "bar": {
      "cs": "Dům",
      "en": "House"
    },
    "sea": {
      "cs": "Moře",
      "en": "Sea"
    }
  }
}'''

json_data = json.loads(settings)
pattern = parse('$.choices.*')

def magic(f: dict, to_lang='cs'):
    return f[to_lang]

pattern.update(json_data, 
               lambda data_field, data, field: data.update({field: magic(data[field])}))
json_data

returns

{
    'choices': {
        'atm': 'Strom',
        'bar': 'Dům',
        'sea': 'Moře'
    }
}