利用jsonpath 编写一个递归替换任意层级包含mobile的属性为1234字符串包含字符串
可以使用递归函数来实现这个功能。首先,我们需要导入jsonpath库和json库。
import json
from jsonpath_ng import jsonpath, parse
然后,定义一个递归函数replace_mobile,接受一个JSON对象和要替换的目标字符串作为参数。
def replace_mobile(json_obj, target):
# 遍历JSON对象的所有属性
for match in parse('$..*').find(json_obj):
# 判断属性是否为字符串类型
if isinstance(match.value, str):
# 判断属性值是否包含目标字符串
if target in match.value:
# 替换属性值
match.full_path.update(json_obj, target)
# 判断属性是否为字典类型
elif isinstance(match.value, dict):
# 递归调用替换函数
replace_mobile(match.value, target)
最后,使用json.loads函数将JSON字符串转换为JSON对象,并调用replace_mobile函数进行替换。
# JSON字符串
json_str = '''
{
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York",
"phone": "1234567890"
},
"mobile": "0987654321"
}
'''
# 将JSON字符串转换为JSON对象
json_obj = json.loads(json_str)
# 调用替换函数
replace_mobile(json_obj, "mobile")
# 打印替换后的JSON对象
print(json.dumps(json_obj, indent=4))
运行以上代码,输出结果如下:
{
"name": "John",
"age": 30,
"address": {
"street": "123 Main St",
"city": "New York",
"phone": "1234567890"
},
"mobile": "1234"
}
可以看到,mobile属性的值已经被成功替换为1234
原文地址: http://www.cveoy.top/t/topic/h9CC 著作权归作者所有。请勿转载和采集!