当前位置: 首页 > 面试题库 >

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

柏高洁
2023-03-14
问题内容

这是json文件

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

我想通过直接给XPath / JsonPath Like来更改name。的值

($.session.name).changevalue("MYSESSINID") 这只是一个例子

我正确使用杰克逊库,并使用以下代码通过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,因此不必在所有调用中都传递它。



 类似资料:
  • 我使用jayway JsonPath库使用给定的路径解析JSON。如果我给出正确的路径,我就能得到字符串值。但是,如果路径是数组,我想在给出路径时得到贴图列表。例如,我有一个JSON,如下所示: 下面是我用来解析json的代码。 如果我给出路径,我正在获取字符串,但我需要地图列表。下面是我使用jsonpath解析Json的代码。 任何人建议适当的方法来得到我所期望的。

  • 我怎么把“”改成“”?我需要使用来自sqlalchemy的数据编写database.json 应该是这样的:

  • 问题内容: 这是我的杰森样品 我想更新SName,ZipCode,taxAmount,Quantity和text [1]值,可以通过任何方式进行。我正在文件中使用JSON,而更新标签正在纳入HashMap中 问题答案: 将用新值替换当前值。同样,您可以更新其他值。完成后,您可以使用以下方法将其转换回: 并将其写回到文件中。

  • 我在文本编辑器中有一个另存为...功能。我想做一个另存为,保存到一个新文件,但是我要保存的永久文件现在应该总是这个新文件。所以当我点击我的另一个按钮,保存,而不是保存到以前的位置,将继续保存到用JFileChooser选择的位置。 我有一个名为currentFile的文件对象,它应该链接到通过“另存为”选择的文件。我目前正在通过在我的按钮操作执行功能中创建一个名为fileName的文件,然后将cu

  • 问题内容: 我有这个HTML代码: 而且我必须选择带有text 的标签所标识的WebElement 。我尝试一些解决方案,例如: 但是每个人都给我: 正确的语法是什么?有人能帮我吗? 问题答案: 您没有正确的XPath语法。您需要在要匹配的文本属性值周围加上引号。尝试: