[英]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.