如何在 java 中使用 XPath/JsonPath 更改 json 文件中的值

新手上路,请多包涵

这是 json 文件

{
    "session":
        {
            "name":"JSESSIONID",
            "value":"5864FD56A1F84D5B0233E641B5D63B52"
        },
    "loginInfo":
        {
            "loginCount":77,
            "previousLoginTime":"2014-12-02T11:11:58.561+0530"
        }
}

我想通过直接给 XPath/JsonPath 来改变 name.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");

仍在文件中它不起作用。

原文由 vaibhavcool20 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

使用 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,这样您就不必在所有调用中都传递它。

原文由 kalle 发布,翻译遵循 CC BY-SA 3.0 许可协议

我发现在 Json 内部交换的最简单方法(当我的 Body 是一个 JSONObject 时)

 import com.jayway.jsonpath.JsonPath;

JsonPath.parse(Body).set(fieldPath, Value);

原文由 Vladi 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题