java 利用jsonpath 编写一个递归替换任意层级包含mobile的属性为1234字符串包含字符串不是json对象示例报文:name John age 30 contact mobile 1234567890 address street 123 Main St city New York
您可以使用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字符串
原文地址: http://www.cveoy.top/t/topic/h9DL 著作权归作者所有。请勿转载和采集!