你可以使用 JsonPath 的递归替换来实现这个需求。下面是一个示例代码:

import com.jayway.jsonpath.JsonPath;
import com.jayway.jsonpath.PathNotFoundException;
import com.jayway.jsonpath.spi.json.JsonProvider;
import com.jayway.jsonpath.spi.json.JsonProviderFactory;
import com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider;

public class JsonPathRecursiveReplace {
    public static void main(String[] args) {
        String jsonString = "{\"name\": \"John\", \"age\": 30, \"contact\": {\"mobile\": \"1234567890\"}, \"address\": {\"street\": \"123 Main St\", \"city\": \"New York\"}}";

        try {
            JsonProvider provider = JsonProviderFactory.createProvider();
            Object jsonObject = provider.parse(jsonString);

            recursiveReplace(jsonObject, "$", "mobile", "1234");

            System.out.println(jsonObject.toString());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private static void recursiveReplace(Object jsonObject, String path, String key, String replacement) {
        JsonProvider provider = JsonProviderFactory.createProvider();
        try {
            if (provider.isMap(jsonObject)) {
                for (String field : provider.getPropertyKeys(jsonObject)) {
                    Object value = provider.getMapValue(jsonObject, field);
                    if (field.equals(key)) {
                        provider.setMapValue(jsonObject, field, replacement);
                    } else {
                        recursiveReplace(value, path + "." + field, key, replacement);
                    }
                }
            } else if (provider.isArray(jsonObject)) {
                for (int i = 0; i < provider.length(jsonObject); i++) {
                    Object value = provider.getArrayIndex(jsonObject, i);
                    recursiveReplace(value, path + "[" + i + "]", key, replacement);
                }
            }
        } catch (PathNotFoundException e) {
            // Ignore if the key is not found in the path
        }
    }
}

运行以上代码可以得到如下输出:

{"name":"John","age":30,"contact":{"mobile":"1234"},"address":{"street":"123 Main St","city":"New York"}}

在这个示例中,我们使用了 com.jayway.jsonpath 库来解析和修改 JSON。首先,我们将 JSON 字符串解析为一个 Object 对象。然后,我们使用 recursiveReplace 方法来递归遍历 JSON 对象。如果当前字段的键与指定的键相匹配,则将其值替换为指定的替换值。否则,我们将递归调用 recursiveReplace 方法来处理子对象或数组

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

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

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