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

时间:2017-02-22 10:15:15

标签: java android json

我有这样的数据结构:

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函数可以解决我的问题。

2 个答案:

答案 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