Как изменить значения JsonObject/JsonArray напрямую?
Как только я разобрал строку JSON в GSON, предоставил класс JsonObject (предположим, что я не хочу анализировать его в каких-либо значимых объектах данных, но строго хочу использовать JsonObject), как я могу изменить поле/значение ключа напрямую?
Я не вижу API, который может мне помочь.
https://static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/gson/JsonObject.html
Ответы
Ответ 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;
}