我有这样的数据结构:
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函数可以解决我的问题。
答案 0 :(得分:3)
如果我的意图是正确的,那么这段代码必须完成这项工作。请注意,这会改变原始来源,因此您可能需要传递副本,如果原始变体不是您想要的。此外,这里我假设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));
}
答案 1 :(得分:0)
尝试accumulate
的{{1}}方法。
以下代码可能对您有用。
org.json.JSONObject