在某些特殊情况下,我希望将 jsonObjects 合并到单个对象中。 我从文件中读取了两个对象
new JsonParser().parse(new FileReader(definitionFile)).getAsJsonObject();
并且两个文件具有相同的结构。 我尝试使用以下代码合并文件:
public JsonObject merge(JsonObject firstObject, JsonObject secondObject) throws Exception {
firstObject.getAsJsonObject(BaseGenerator.MEMBER_METHODS).entrySet()
.addAll(secondObject.getAsJsonObject(BaseGenerator.MEMBER_METHODS).entrySet());
return firstObject;
}
但是在尝试合并这些对象时抛出异常:java.lang.UnsupportedOperationException
如何合并这些对象?
最佳答案
这很容易。只是不要使用 entrySet()
方法合并它们,因为该方法返回的集合不实现 Set.add
/Set.addAll
。
private static void mergeInto(final JsonObject o1, final JsonObject o2) {
for ( final Entry<String, JsonElement> e : o2.entrySet() ) {
o1.add(e.getKey(), e.getValue());
}
}
此外,上面的方法不返回任何内容,以便明确指示参数可能会更改其内部状态 - 实际上是第一个参数(对于任何期望从返回某些内容的方法中获得新内容的人来说,这通常是一个很大的惊喜)。我将创建一个新的 JsonObject
实例,以免触及参数状态,例如:
private static JsonObject merge(final JsonObject o1, final JsonObject o2) {
final JsonObject merged = new JsonObject();
mergeInto(merged, o1);
mergeInto(merged, o2);
return merged;
}
关于java - Gson合并JsonObject抛出java.lang.UnsupportedOperationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40037807/