java 利用jsonpath 编写一个递归替换任意层级包含mobile的属性为1234字符串包含字符串不是json对象
你可以使用 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 方法来处理子对象或数组
原文地址: http://www.cveoy.top/t/topic/h9CJ 著作权归作者所有。请勿转载和采集!