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
找到的更新值
我需要一个工具来修改 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
找到的更新值