当前位置: 首页 > 知识库问答 >
问题:

Java-使用jsonPath根据当前值更新Json

东方文林
2023-03-14

我用以下代码使用jsonPath更新了一个json对象

JSONObject json = new JSONObject("{\"data\":[{\"city\":\"New York\",\"name\":\"John\",\"age\":31},{\"city\":\"Paris\",\"name\":\"Jack\",\"age\":12}]}");
DocumentContext doc = JsonPath.parse(json.toString())
                .set("$..name","newName");
System.out.println("doc.jsonString() = " + doc.jsonString());

产出:

doc.jsonString() = {"data":[{"city":"New York","name":"newName","age":31},{"city":"Paris","name":"newName","age":12}]}

现在我想根据旧值更新值(通过在旧值上应用函数)
类似

DocumentContext doc = JsonPath.parse(json.toString())
                .set("$..name",upper(oldValue))
                .set("$..age", oldValue+10);

这将导致以下json

 doc.jsonString() = doc.jsonString() = {"data":[{"city":"New York","name":"JOHN","age":41},{"city":"Paris","name":"JACK","age":22}]}

有人知道我如何才能像那样引用旧值吗?
问候,

共有1个答案

米项禹
2023-03-14

可以使用DocumentContext类的map函数,如下例所示:

DocumentContext json = JsonPath.using(configuration).parse(jsonStr);
DocumentContext result = json.map("$..name", (currentValue, configuration) -> {
    return currentValue.toString().toUpperCase();
});
System.out.println(result.jsonString());

该示例将值更改为大写。

尝试在Jsonpath DocumentContext类留档中检查它。

 类似资料:
  • 问题内容: 是否可以获取字段的当前值,将其用作计算中的变量,然后根据结果更新字段? 例如,表1中ID为“ 1”的记录的值为“ 2” 问题答案: 对于具有等于“ 1”的列的任何行,这会将列设置为同一行的列(加1)的值:

  • 假设我有一个名为mytable的表,它看起来像这样: 我希望能够更新所有的记录在p6列添加到39但只为行有不同的p2值。换句话说,结果表应该如下所示: 我将p6行着色为黄色,以显示它不应该移动的地方,因为所有的p2单元格都是灰色的,它们的值是相同的。绿色的p6行应该会增长,因为p2也会增长,所以我把+39加到所有的行上。示例中的最后第13行再次为黄色,因为12行上的p2=13行上的p2。 在Gor

  • 我正忙着创建VB. Net Windows应用程序。我正在使用带有名为skedulering的表的microsoft sql服务器数据库。我正在尝试使用基于另一列(即Kode)的唯一值更新一列(即Groep)。此值接受Kode值的前三个字符并向其添加一个整数。我认为我的意思最好用以下内容来解释: 所有红色边框行都具有相同的Groep值。有人能帮我创建sql语句吗? 问候

  • 问题内容: 我想更新表中列的前10个值。我有三栏;,和。要获得前10个值,我可以使用以下方法: 我想做的是根据的大小将值设置为一系列。这可以在PostgreSQL中完成吗? 问题答案: WITH cte AS ( SELECT id, row_number() OVER (ORDER BY account DESC NULLS LAST) AS rn FROM accountrecords ORD

  • 问题内容: 可以说我有这些专栏 我想要做的就是更新和基于价值。 因此结果将是: 我希望更新操作像标识列一样,而实际上不使其成为标识列。我知道我可以按“ x”排序,结果就是顺序,但是我想生成一个报告,在这里可以逐行查看项目。 这样的事情可能吗? 问题答案: 或在单个查询中进行尝试

  • cmf_update_current_user($user) 功能 更新当前登录前台用户的信息 参数 $user: array 前台用户的信息 返回 无