Java - используйте jsonPath для обновления Json на основе текущего значения - PullRequest
0 голосов
/ 21 сентября 2018

Мне удалось обновить объект json с помощью jsonPath с этим кодом

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 Ответ

0 голосов
/ 29 июля 2019

Вы можете использовать функцию map класса DocumentContext, как в примере ниже:

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 .

...