在某些特殊情况下,我希望将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
如何合并这些对象?
答案 0 :(得分:0)
异常是因为GSON库的EntrySet
实现没有实现add
函数。
我很长时间没有接触过GSON lib。但是,也许你可以试试这样的东西
new HashSet(firstObject.getAsJsonObject(BaseGenerator.MEMBER_METHODS).entrySet()).addAll(secondObject.getAsJsonObject(BaseGenerator.MEMBER_METHODS).entrySet())`
答案 1 :(得分:0)
这很容易。只是不要使用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;
}