Java 使用 JsonPath 递归替换 JSON 中任意层级包含 "mobile" 的属性
你可以使用 JsonPath 的递归替换来实现这个需求。下面是一个示例代码:\n\njava\nimport com.jayway.jsonpath.JsonPath;\nimport com.jayway.jsonpath.PathNotFoundException;\nimport com.jayway.jsonpath.spi.json.JsonProvider;\nimport com.jayway.jsonpath.spi.json.JsonProviderFactory;\nimport com.jayway.jsonpath.spi.mapper.JsonSmartMappingProvider;\n\npublic class JsonPathRecursiveReplace {\n public static void main(String[] args) {\n String jsonString = "{\"name\": \"John\", \"age\": 30, \"contact\": {\"mobile\": \"1234567890\"}, \"address\": {\"street\": \"123 Main St\", \"city\": \"New York\"}}";\n\n try {\n JsonProvider provider = JsonProviderFactory.createProvider();\n Object jsonObject = provider.parse(jsonString);\n\n recursiveReplace(jsonObject, "$", "mobile", "1234");\n\n System.out.println(jsonObject.toString());\n } catch (Exception e) {\n e.printStackTrace();\n } }\n\n private static void recursiveReplace(Object jsonObject, String path, String key, String replacement) {\n JsonProvider provider = JsonProviderFactory.createProvider();\n try {\n if (provider.isMap(jsonObject)) {\n for (String field : provider.getPropertyKeys(jsonObject)) {\n Object value = provider.getMapValue(jsonObject, field);\n if (field.equals(key)) {\n provider.setMapValue(jsonObject, field, replacement);\n } else {\n recursiveReplace(value, path + "." + field, key, replacement);\n }\n }\n } else if (provider.isArray(jsonObject)) {\n for (int i = 0; i < provider.length(jsonObject); i++) {\n Object value = provider.getArrayIndex(jsonObject, i);\n recursiveReplace(value, path + "[" + i + "]", key, replacement);\n }\n }\n } catch (PathNotFoundException e) {\n // Ignore if the key is not found in the path\n }\n }\n}\n\n\n运行以上代码可以得到如下输出:\n\njson\n{\"name\":\"John\",\"age\":30,\"contact\":{\"mobile\":\"1234\"},\"address\":{\"street\":\"123 Main St\",\"city\":\"New York\"}\n}\n\n在这个示例中,我们使用了 com.jayway.jsonpath 库来解析和修改 JSON。首先,我们将 JSON 字符串解析为一个 Object 对象。然后,我们使用 recursiveReplace 方法来递归遍历 JSON 对象。如果当前字段的键与指定的键相匹配,则将其值替换为指定的替换值。否则,我们将递归调用 recursiveReplace 方法来处理子对象或数组。
原文地址: http://www.cveoy.top/t/topic/pSoU 著作权归作者所有。请勿转载和采集!