簡體   English   中英

Gson合並JsonObject引發java.lang.UnsupportedOperationException

[英]Gson merging JsonObject throws java.lang.UnsupportedOperationException

在某些特殊情況下,我希望將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

如何合並這些對象?

例外是因為GSON庫的EntrySet實現未實現add函數。

我已經很久沒有接觸GSON lib了。 但是,也許您可​​以嘗試這樣的事情

new HashSet(firstObject.getAsJsonObject(BaseGenerator.MEMBER_METHODS).entrySet()).addAll(secondObject.getAsJsonObject(BaseGenerator.MEMBER_METHODS).entrySet())`

這很容易。 只是不要使用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;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM