您可以使用JsonPath和Jackson库来实现递归替换包含"mobile"属性的值为"1234"。以下是一个示例代码:

import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.jayway.jsonpath.JsonPath;

public class JsonPathExample {
    public static void main(String[] args) throws Exception {
        String jsonString = "{\"name\": \"John\", \"age\": 30, \"contact\": \"{\\\"mobile\\\": \\\"1234567890\\\"}\", \"address\": {\"street\": \"123 Main St\", \"city\": \"New York\"}}";
        
        // 使用Jackson库解析JSON字符串
        ObjectMapper mapper = new ObjectMapper();
        JsonNode jsonNode = mapper.readTree(jsonString);
        
        // 递归替换包含"mobile"属性的值
        replaceMobile(jsonNode, "1234");
        
        // 将JsonNode转换回JSON字符串
        String updatedJsonString = mapper.writeValueAsString(jsonNode);
        System.out.println(updatedJsonString);
    }
    
    private static void replaceMobile(JsonNode jsonNode, String newValue) {
        // 如果当前节点是一个对象,则递归处理其所有属性
        if (jsonNode.isObject()) {
            for (JsonNode childNode : jsonNode) {
                replaceMobile(childNode, newValue);
            }
        }
        
        // 如果当前节点是一个字符串,并且包含"mobile"属性,则替换其值为newValue
        if (jsonNode.isTextual() && jsonNode.asText().contains("mobile")) {
            ((JsonNode) jsonNode).textNode(newValue);
        }
    }
}

运行以上代码将输出:

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

在代码中,我们首先使用Jackson库解析JSON字符串并将其转换为JsonNode对象。然后,我们使用递归方法来遍历JsonNode树,并替换包含"mobile"属性的值为"1234"。最后,我们将JsonNode对象转换回JSON字符串

java 利用jsonpath 编写一个递归替换任意层级包含mobile的属性为1234字符串包含字符串不是json对象示例报文:name John age 30 contact mobile 1234567890 address street 123 Main St city New York

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

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