Comment modifier directement les valeurs de JsonObject / JsonArray?
une fois que j'ai analysé une chaîne JSON dans une classe de JsonObject fournie par GSON, (supposons que je ne souhaite pas l'analyser dans des objets de données significatifs, mais que je veux strictement utiliser JsonObject), Comment puis-je modifier directement un champ / une valeur d'une clé?
Je ne vois pas D'API qui pourrait m'aider.
https://static.javadoc.io/com.google.code.gson/gson/2.6.2/com/google/gson/JsonObject.html
5 réponses
étrangement, la réponse est de continuer à rajouter la propriété. J'étais à moitié attend un setter
méthode. : S
System.out.println("Before: " + obj.get("DebugLogId")); // original "02352"
obj.addProperty("DebugLogId", "YYY");
System.out.println("After: " + obj.get("DebugLogId")); // now "YYY"
cela fonctionne pour modifier la valeur de childkey en utilisant JSONObject
.
importer utilisé est
import org.json.JSONObject;
ex json:(convertir fichier json à la chaîne tout en donnant en entrée)
{
"parentkey1": "name",
"parentkey2": {
"childkey": "test"
},
}
Code
JSONObject jObject = new JSONObject(String jsoninputfileasstring);
jObject.getJSONObject("parentkey2").put("childkey","data1");
System.out.println(jObject);
sortie:
{
"parentkey1": "name",
"parentkey2": {
"childkey": "data1"
},
}
depuis la version 2.3 de la bibliothèque Gson la classe JsonArray a une méthode 'set'.
Voici un exemple simple:
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"));
une Autre approche serait de désérialiser dans un java.util.Map
, et puis il suffit de modifier le Java Map
comme voulu. Cela sépare le traitement de données côté Java du mécanisme de transport de données (JSON), ce qui est la façon dont je préfère organiser mon code: en utilisant JSON pour le transport de données, pas comme une structure de données de remplacement.
C'est en fait tout dans la documentation.
JSONObject et JSONArray peuvent tous deux être utilisés pour remplacer la structure de données standard.
Pour implémenter un setter il suffit d'appeler un remove(String name)
avant put(String name, Object value)
.
Voici un exemple simple:
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;
}