繁体   English   中英

Android:如何将现有的JSONObject添加到现有的密钥

[英]Android: How to add existing JSONObject to existing key

我有这样的数据结构:

source: {
    property_1: String,
    property_2: String,
    property_3: {
        property_31: String
    }
}

我想要一个这样的功能:

private JSONObject mergeProperty(JSONObject source, String propertyName, JSONObject newData)

其中, source是上面的数据, propertyName = "property_3" ,并且

newData: {
    property_32: String,
    property_33: int
}

结果调用mergeProperty(source, "property_3", newData)为:

output: {
    property_1: String,
    property_2: String,
    property_3: {
        property_31: String,
        property_32: String,
        property_33: int
    }
}

是否有任何简单的方法无需首先将JSON对象映射到HashMap即可实现? 我没有找到与我的问题相关的内置JSONObject函数。

如果我的意图正确,那么此代码就可以完成任务。 请注意,这将使原始来源发生变异,因此,如果您不希望复制原始来源,则可能需要传递一份副本。 此外,在这里我假设propertyName在源JSON的第一级上,并且也是JSON,否则将抛出JSONException。

JSONObject mergeTarget = source.getJSONObject(propertyName);
Iterator<String> keys = newData.keys();

while (keys.hasNext()) {
    String key = keys.next();
    mergeTarget.put(key, newData.get(key));
}

尝试accumulate org.json.JSONObject方法。

以下代码可能对您有用。

public class Test {

    public static void main(String[] args){
        System.out.println("test");
        JSONObject source = new JSONObject("{\"property_1\":\"String\",\"property_2\":\"String\",\"property_3\":{\"property_31\":\"String\"}}");
        JSONObject newData = new JSONObject("{\"property_32\":\"String\",\"property_33\":\"int\"}");
        System.out.println("Before merge :"+source.toString());
        mergeProperty(source, "property_3", newData);
        System.out.println("After merge :"+source.toString());
    }

    private static void mergeProperty(JSONObject source, String property, JSONObject newData){
        for (Object key : newData.keySet()){
            String keyStr = (String)key;
            Object keyvalue = newData.get(keyStr);
            source.getJSONObject(property).accumulate(keyStr , keyvalue);
        }
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM