Как использовать replace (K, V) в javax. json .JsonObject? - PullRequest
0 голосов
/ 24 февраля 2020

Мне нужно прочитать JsonObject, изменить значение, а затем go. Допустим,

{ "aKey": "old value", , "anotherKey": "another value" }

должно быть изменено на:

{ "aKey": "new value", "anotherKey": "another value" }

Я прочитал, что JsonObject является неизменяемым, он находится в документации и здесь: Как изменить javax. json .JsonObject Object?

В любом случае JsonObject также предоставляет метод под названием replace (ключ K, значение V) с описанием: Заменяет запись для указанного ключа, только если она в настоящий момент сопоставлена ​​с некоторым значением.

Как использовать этот метод? Любой пример?

Я пробовал другой способ, например, если я делаю так:

jsonObject.replace("aKey", Json.createObjectBuilder().add("aKey", "new value").build());

Я получаю java.lang.UnsupportedOperationException

Я полагаю, я должен сделать замену во время копирования (??). То есть добавление всех значений старого объекта, кроме значения, которое я хочу заменить?

1 Ответ

0 голосов
/ 24 февраля 2020

Наконец я создал свою собственную функцию. Он возвращает объект с замененным ключом / значением (в моем случае, String / String):

JsonObject myReplace(JsonObject jsonObject, String key, String newValue) {
    JsonObjectBuilder createObjectBuilder = Json.createObjectBuilder();
    Iterator it = jsonObject.entrySet().iterator();
    while (it.hasNext()) {
        JsonObject.Entry mapEntry = (JsonObject.Entry)it.next();
        if(mapEntry.getKey() == key){
            createObjectBuilder.add(key, newValue);
        }
        else{
            createObjectBuilder.add(mapEntry.getKey().toString(), mapEntry.getValue().toString());
        }
    }
    return createObjectBuilder.build();
}

Так что я могу сделать:

myJsonObject = myReplace(myJsonObject, "aKey", "newValue"); // I know,  the assignement could be done in the method, too.
...