簡體   English   中英

使用gson包解析嵌套的json結構

[英]Parsing a nested json structure using gson package

Java中對JSON結構的解碼已得到解答,我已將其用於幾個簡單結構,但這似乎有些棘手。 (我沒有花太多時間在開發Java代碼上,因此我可能在這里錯過了一些特定於語言的東西,我也可能錯了)

{
    "who": "123",
    "mapping": {
        "element1": {
            "element11": {
                "relation": "rel1",
                "direction_p2c": true,
                "element111": {
                    "relation": "rel2",
                    "direction_p2c": true,
                    "element1111": {
                        "relation": "rel1",
                        "direction_p2c": false
                    },
                    "element1112": {
                        "relation": "rel1",
                        "direction_p2c": false
                    },
                    "element1113": {
                        "relation": "rel1",
                        "direction_p2c": false
                    }
                },
                "element112": {
                    "relation": "rel3",
                    "direction_p2c": false
                }
            },
            "element12": {
                "relation": "rel1",
                "direction_p2c": true,
                "element121": {
                    "relation": "rel2",
                    "direction_p2c": true,
                    "element1211": {
                        "relation": "rel1",
                        "direction_p2c": false
                    }
                }
            }
        },
        "element2": {
            "element21": {
                "relation": "rel2",
                "direction_p2c": true
            },
            "element22": {
                "relation": "rel3",
                "direction_p2c": true
            },
            "element23": {
                "relation": "rel1",
                "direction_p2c": true
            }
        }
    }
}

上面是提到的結構,我正在使用Gson進行解碼,下面是我正在嘗試的結構,

void recursive(String key, HashMap<String, Object> value) {
    for (Map.Entry<String, Object> entry: value.entrySet()) {
        recurssive(entry.getKey(), (HashMap<String, Object>) entry.getValue());
    }
}

HashMap<String, Object> decodedJson = new Gson().fromJson(inputJson, HashMap.class);
recursive("mapping", (HashMap<String, Object>) decodedJson.get("mapping"));

我在第一個recursive函數調用時在運行時遇到以下錯誤

javax.servlet.ServletException: java.lang.ClassCastException: com.google.gson.internal.LinkedTreeMap cannot be cast to java.util.HashMap

我還沒有嘗試使用JsonParser使用JsonParser 解析嵌套的JSON中定義的方法來嘗試這種方法,但是對解碼它的任何輸入表示贊賞。

java.util.Map接口替換java.util.HashMap類。 它由Gson的LinkedTreeMap實現,因此不會觸發ClassCastException

void recursive(String key, Map<String, Object> value) {
  ...
}

Map<String, Object> decodedJson = new Gson().fromJson(inputJson, Map.class);
...

GsonLinkedTreeMap擴展了內部實現Map接口的AbstractHashMap
Gson使用LinkedTreeMap代替HashMap 由於您將對象強制轉換為HashMap ,這是不可能完成的(因為它不在層次結構中),因此ClassCastException
如@Karol所述,將HashMap替換為Map ,一切正常。

暫無
暫無

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

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