Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新JSONObject中的元素_Java_Android_Json - Fatal编程技术网

Java 更新JSONObject中的元素

Java 更新JSONObject中的元素,java,android,json,Java,Android,Json,假设我给了一个JSONObject { "person":{"name":"Sam", "surname":"ngonma"}, "car":{"make":"toyota", "model":"yaris"} } 如何更新JSONObject中的一些值 如下图所示: String name = jsonArray.getJSONObject(0).getJSONObject("person").getString("name"); name = "Sammie"; 使用put方法:

假设我给了一个JSONObject

{
 "person":{"name":"Sam", "surname":"ngonma"},
 "car":{"make":"toyota", "model":"yaris"}
 }
如何更新JSONObject中的一些值

如下图所示:

String name = jsonArray.getJSONObject(0).getJSONObject("person").getString("name");
name = "Sammie";
使用put方法:


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

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

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

我没有用你的例子;但概念上是一样的。

您好,我可以向您推荐通用方法。使用递归

    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;
}
publicstaticjsonobject函数(jsonobjectobj、stringkeymain、stringvaluemain、stringnewvalue)抛出异常{
//我们需要知道Jsonobject的键
JSONObject json=新的JSONObject()
迭代器迭代器=obj.keys();
字符串键=null;
while(iterator.hasNext()){
key=(字符串)迭代器.next();
//若对象只是字符串,那个么我们将更改键中的值
if((obj.optJSONArray(key)==null)和&(obj.optJSONObject(key)==null)){
if((key.equals(keyMain))&&(obj.get(key.toString().equals(valueMain))){
//赋予新的价值
对象put(键,新值);
返回obj;
}
}
//如果是jsonobject
if(obj.optJSONObject(key)!=null){
函数(obj.getJSONObject(key)、keyMain、valueMain、newValue);
}
//如果是jsonarray
if(obj.optJSONArray(key)!=null){
JSONArray jArray=obj.getJSONArray(key);
for(inti=0;i
publicstaticjsonobjectupdatejson(jsonobjectobj,stringkeystring,stringnewvalue)抛出异常{
JSONObject json=新的JSONObject();
//获取json对象的键
迭代器迭代器=obj.keys();
字符串键=null;
while(iterator.hasNext()){
key=(字符串)迭代器.next();
//如果键是字符串,则更新该值
if((obj.optJSONArray(key)==null)和&(obj.optJSONObject(key)==null)){
if((key.equals(keyString))){
//赋予新的价值
对象put(键,新值);
返回obj;
}
}
//如果是jsonobject
if(obj.optJSONObject(key)!=null){
updateJson(obj.getJSONObject(key),keyString,newValue);
}
//如果是jsonarray
if(obj.optJSONArray(key)!=null){
JSONArray jArray=obj.getJSONArray(key);
for(int i=0;i
用新值更新任何JSONObjet的通用方法

private static void updateJsonValues(JsonObject jsonObj) {
    for (Map.Entry<String, JsonElement> entry : jsonObj.entrySet()) {
        JsonElement element = entry.getValue();
        if (element.isJsonArray()) {
            parseJsonArray(element.getAsJsonArray());
        } else if (element.isJsonObject()) {
            updateJsonValues(element.getAsJsonObject());
        } else if (element.isJsonPrimitive()) {
            jsonObj.addProperty(entry.getKey(), "<provide new value>");
        }

    }
}

private static void parseJsonArray(JsonArray asJsonArray) {
    for (int index = 0; index < asJsonArray.size(); index++) {
        JsonElement element = asJsonArray.get(index);
        if (element.isJsonArray()) {
            parseJsonArray(element.getAsJsonArray());
        } else if (element.isJsonObject()) {
            updateJsonValues(element.getAsJsonObject());
        }

    }
}
private static void updateJsonValues(JsonObject jsonObj){
for(Map.Entry:jsonObj.entrySet()){
JsonElement元素=entry.getValue();
if(element.isJsonArray()){
parseJsonArray(element.getAsJsonArray());
}else if(element.isJsonObject()){
updateJsonValues(element.getAsJsonObject());
}else if(element.isJsonPrimitive()){
jsonObj.addProperty(entry.getKey(),“”);
}
}
}
私有静态void parseJsonArray(JsonArray asJsonArray){
for(int index=0;index
对于它的价值,也可以与person.element(“name”,“Sammie”)一起使用。
@EriPro请看看这个问题什么是valueMain?如果我没有弄错的话,应该替换旧的值。但是如何更新json数组中的特定位置@eabyshev@Venkatesh第一个设置为参数keyMain、valueMain(键,值-json中的特定位置)和用于替换的newValue
public static JSONObject updateJson(JSONObject obj, String keyString, String newValue) throws Exception {
            JSONObject json = new JSONObject();
            // get the keys of json object
            Iterator iterator = obj.keys();
            String key = null;
            while (iterator.hasNext()) {
                key = (String) iterator.next();
                // if the key is a string, then update the value
                if ((obj.optJSONArray(key) == null) && (obj.optJSONObject(key) == null)) {
                    if ((key.equals(keyString))) {
                        // put new value
                        obj.put(key, newValue);
                        return obj;
                    }
                }

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

                // if it's jsonarray
                if (obj.optJSONArray(key) != null) {
                    JSONArray jArray = obj.getJSONArray(key);
                    for (int i = 0; i < jArray.length(); i++) {
                        updateJson(jArray.getJSONObject(i), keyString, newValue);
                    }
                }
            }
            return obj;
        }
private static void updateJsonValues(JsonObject jsonObj) {
    for (Map.Entry<String, JsonElement> entry : jsonObj.entrySet()) {
        JsonElement element = entry.getValue();
        if (element.isJsonArray()) {
            parseJsonArray(element.getAsJsonArray());
        } else if (element.isJsonObject()) {
            updateJsonValues(element.getAsJsonObject());
        } else if (element.isJsonPrimitive()) {
            jsonObj.addProperty(entry.getKey(), "<provide new value>");
        }

    }
}

private static void parseJsonArray(JsonArray asJsonArray) {
    for (int index = 0; index < asJsonArray.size(); index++) {
        JsonElement element = asJsonArray.get(index);
        if (element.isJsonArray()) {
            parseJsonArray(element.getAsJsonArray());
        } else if (element.isJsonObject()) {
            updateJsonValues(element.getAsJsonObject());
        }

    }
}