如何使用java中的XPath / JsonPath更改json文件中的值 [英] How to change values in a json file using XPath/JsonPath in java
本文介绍了如何使用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
I want to change the value of name.by directly giving XPath/JsonPath Like
($。session。 name).changevalue(MYSESSINID)
这只是一个例子
($.session.name).changevalue("MYSESSINID")
this is just a Example
我正确使用jackson库并使用下面的通过XPath读取的代码
I am correctly using jackson library and using the below code for reading via 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更改名称
so is their a way to change the name by 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,这样您就不必将其传入所有电话。
You can configure the default JsonProvider so you don't have to pass it in all calls.
这篇关于如何使用java中的XPath / JsonPath更改json文件中的值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文