更新JSONObject中的元素

Har*_*rry 50 java android json

可以说我给了一个JSONObject

{
 "person":{"name":"Sam", "surname":"ngonma"},
 "car":{"make":"toyota", "model":"yaris"}
 }
Run Code Online (Sandbox Code Playgroud)

如何更新JSONObject中的某些值?

如下所示:

String name = jsonArray.getJSONObject(0).getJSONObject("person").getString("name");
name = "Sammie";
Run Code Online (Sandbox Code Playgroud)

cow*_*wls 103

使用put方法:https://developer.android.com/reference/org/json/JSONObject.html

JSONObject person =  jsonArray.getJSONObject(0).getJSONObject("person");
person.put("name", "Sammie");
Run Code Online (Sandbox Code Playgroud)

  • @Harry将答案标记为已接受,如果有帮助的话 (7认同)
  • 对于它的价值,也适用于`person.element("name", "Sammie")` (2认同)

rai*_*mar 25

删除键,然后再次添加修改后的键,值对,如下所示:

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

    js.remove("name");
    js.put("name", "abc");
Run Code Online (Sandbox Code Playgroud)

我没有用过你的例子; 但在概念上也一样.

  • 无需删除 - "内部表单是一个具有get和opt方法的对象,用于按名称访问值,**表示用于按名称添加或替换**值的方法." http://www.json.org/javadoc/org/json/JSONObject.html (26认同)

eab*_*hev 5

您好,我可以建议您使用通用方法。使用递归。

    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;
}
Run Code Online (Sandbox Code Playgroud)

它应该工作。如果您有任何疑问,请继续..我准备好了。

  • valueMain是什么? (4认同)