如何使用java中的XPath / JsonPath更改json文件中的值
这是json文件
{ "session": { "name":"JSESSIONID", "value":"5864FD56A1F84D5B0233E641B5D63B52" }, "loginInfo": { "loginCount":77, "previousLoginTime":"2014-12-02T11:11:58.561+0530" } }
我想更改name.by的值直接给XPath / JsonPath Like
($.session.name).changevalue("MYSESSINID")
这只是一个例子
我正确使用jackson库并使用以下代码通过XPath进行读取
ObjectMapper mapper = new ObjectMapper(); Object jsonObj=mapper.readValue(new File(Json file), Object.class); Object name=PropertyUtils.getProperty(jsonObj, "session.name"); System.out.println("Name:"+name);
他们是一种通过XPath更改名称的方法
PropertyUtils.setProperty(jsonObj, "session.value", "new value");
仍然在文件中它无法正常工作。
使用Jayways JsonPath您可以:
private static final Configuration configuration = Configuration.builder() .jsonProvider(new JacksonJsonNodeJsonProvider()) .mappingProvider(new JacksonMappingProvider()) .build(); @Test public void a_value_can_be_updated(){ String originalJson = "{\n" + "\"session\":\n" + " {\n" + " \"name\":\"JSESSIONID\",\n" + " \"value\":\"5864FD56A1F84D5B0233E641B5D63B52\"\n" + " },\n" + "\"loginInfo\":\n" + " {\n" + " \"loginCount\":77,\n" + " \"previousLoginTime\":\"2014-12-02T11:11:58.561+0530\"\n" + " }\n" + "}"; JsonNode updatedJson = JsonPath.using(configuration).parse(originalJson).set("$.session.name", "MYSESSINID").json(); System.out.println(updatedJson.toString()); }
您可以配置默认的JsonProvider,因此您不必在所有调用中传递它。
PropertyUtils.setProperty(jsonObj, "session.value", "new value"); PropertyUtils.setProperty(jsonObj, "session.name", "new name"); mapper.writeValue(Json File ,jsonObj);
- 在Jackson的单个文件中反序列化来自多个YAML文档的POJO
- 如何使用jackson将自定义反序列化器添加到接口
- 弹簧控制器中的简单字符串作为JSON返回值
- 如何阻止Jackson序列化多态类型的注释属性?
- 如何使用Spring RestTemplate表示为JSON的查询参数?
- 无法解析类型com.fasterxml.jackson.core.JsonGenerator。 它是从所需的.class文件间接引用的
- Spring REST,JSON“无法处理托管/后向引用’defaultReference’”415不支持的媒体类型
- 使用超大的json文件。 总是内存不足
- 阻止Jackson中的自动String to Integer转换