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

19
demandé sur Francis Bartkowiak 2012-07-12 05:33:09

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"
44
répondu Oh Chin Boon 2012-07-12 02:01:03

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"
    },
}
7
répondu Dheeraj Konatham 2016-11-10 09:08:40

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"));
5
répondu micaelgallego 2014-10-01 13:40:30

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.

1
répondu Programmer Bruce 2012-07-12 17:38:28

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;
}
0
répondu Tim Armstrong-Ooi 2013-08-18 11:24:04