可以使用递归函数来实现这个功能。首先,我们需要导入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

利用jsonpath 编写一个递归替换任意层级包含mobile的属性为1234字符串包含字符串

原文地址: http://www.cveoy.top/t/topic/h9CC 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录