web-dev-qa-db-fra.com

Mettre à jour des éléments dans un JSONObject

Disons que j'ai donné un JSONObject

{
 "person":{"name":"Sam", "surname":"ngonma"},
 "car":{"make":"toyota", "model":"yaris"}
 }

Comment mettre à jour certaines des valeurs de JSONObject?

Comme ci-dessous:

String name = jsonArray.getJSONObject(0).getJSONObject("person").getString("name");
name = "Sammie";
48
Harry

Utilisez la méthode put: https://developer.Android.com/reference/org/json/JSONObject.html

JSONObject person =  jsonArray.getJSONObject(0).getJSONObject("person");
person.put("name", "Sammie");
100
cowls

Supprimez la clé, puis ajoutez à nouveau la paire clé/valeur modifiée, comme indiqué ci-dessous:

    JSONObject js = new JSONObject();
    js.put("name", "rai");

    js.remove("name");
    js.put("name", "abc");

Je n'ai pas utilisé votre exemple mais conceptuellement, c'est pareil.

25
rai.skumar

Bonjour, je peux vous suggérer une méthode universelle. utiliser la récursivité.

    public static JSONObject function(JSONObject obj, String keyMain,String valueMain, String newValue) throws Exception {
    // We need to know keys of Jsonobject
    JSONObject json = new JSONObject()
    Iterator iterator = obj.keys();
    String key = null;
    while (iterator.hasNext()) {
        key = (String) iterator.next();
        // if object is just string we change value in key
        if ((obj.optJSONArray(key)==null) && (obj.optJSONObject(key)==null)) {
            if ((key.equals(keyMain)) && (obj.get(key).toString().equals(valueMain))) {
                // put new value
                obj.put(key, newValue);
                return obj;
            }
        }

        // if it's jsonobject
        if (obj.optJSONObject(key) != null) {
            function(obj.getJSONObject(key), keyMain, valueMain, newValue);
        }

        // if it's jsonarray
        if (obj.optJSONArray(key) != null) {
            JSONArray jArray = obj.getJSONArray(key);
            for (int i=0;i<jArray.length();i++) {
                    function(jArray.getJSONObject(i), keyMain, valueMain, newValue);
            }
        }
    }
    return obj;
}

Ça devrait marcher. Si vous avez des questions, allez-y… je suis prêt.

4
eabyshev