Как изменить значения JsonObject/JsonArray напрямую? - программирование
Подтвердить что ты не робот

Как изменить значения JsonObject/JsonArray напрямую?

Как только я разобрал строку JSON в GSON, предоставил класс JsonObject (предположим, что я не хочу анализировать его в каких-либо значимых объектах данных, но строго хочу использовать JsonObject), как я могу изменить поле/значение ключа напрямую?

Я не вижу API, который может мне помочь.

https://static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/gson/JsonObject.html

4b9b3361

Ответ 1

Странно, ответ заключается в том, чтобы продолжать добавлять свойство. Я был в ожидании метода setter.: S

System.out.println("Before: " + obj.get("DebugLogId")); // original "02352"

obj.addProperty("DebugLogId", "YYY");

System.out.println("After: " + obj.get("DebugLogId")); // now "YYY"

Ответ 2

Начиная с версии 2.3 библиотеки Gson, класс JsonArray имеет метод "set".

Вот простой пример:

JsonArray array = new JsonArray();
array.add(new JsonPrimitive("Red"));
array.add(new JsonPrimitive("Green"));
array.add(new JsonPrimitive("Blue"));

array.remove(2);
array.set(0, new JsonPrimitive("Yelow"));

Ответ 3

Это работает для изменения значения дочернего объекта с помощью JSONObject. используется импорт

import org.json.JSONObject;

ex json: (конвертировать json файл в строку, указывая в качестве ввода)

{
    "parentkey1": "name",
    "parentkey2": {
     "childkey": "test"
    },
}

код

JSONObject jObject  = new JSONObject(String jsoninputfileasstring);
jObject.getJSONObject("parentkey2").put("childkey","data1");
System.out.println(jObject);

выход:

{
    "parentkey1": "name",
    "parentkey2": {
     "childkey": "data1"
    },
}

Ответ 4

Другим подходом было бы десериализовать в java.util.Map, а затем просто изменить Java Map по мере необходимости. Это отделяет обработку данных на стороне Java от механизма передачи данных (JSON), и я предпочитаю организовать свой код: использование JSON для переноса данных, а не как заменяемая структура данных.

Ответ 5

На самом деле все это в документации.
JSONObject и JSONArray могут использоваться для замены стандартной структуры данных.
Для реализации сеттера просто вызовите remove(String name) до put(String name, Object value).

Вот простой пример:

public class BasicDB {

private JSONObject jData = new JSONObject;

public BasicDB(String username, String tagline) {
    try {
        jData.put("username", username);
        jData.put("tagline" , tagline);
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public String getUsername () { 
    String ret = null;
    try {
        ret = jData.getString("username");
    } catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } 
    return ret;
}

public void setUsername (String username) { 
    try {
        jData.remove("username");
        jData.put("username" , username);
    } catch (JSONException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}

public String getTagline () {
    String ret = null;
    try {
        ret = jData.getString("tagline");
    } catch (JSONException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } 
    return ret;
}