将class作为参数的Gson.fromJson和将Type作为参数的那个有什么区别?

时间:2014-04-02 17:40:41

标签: java json gson

我试图用如下结构解析Json对象:

{
"something@email.com": {
    "data1": {
        "fullName": "Mr X Y",
        "givenName": "X"
    },
    "data2": {
        "age": "70",
        "gender": "Male"
    },
    "data3": [
        {
            "typeId": "xyz",
            "url": "xyz.com"
        }
    ],
    "status": 200,
},
"anotherThing@email.com": {
    "data1": {
        "fullName": "Mr A B",
        "givenName": "A"
    },
    "data2": {
        "age": "20",
        "gender": "Male"
    },
    "data3": [
        {
            "typeId": "abc",
            "url": "abc.com"
        }
    ],
    "status": 200,
}
}

我使用字段TempBean创建了一个bean Map<String, Person>,并将Person作为另一个适当定义的bean来接受Json。

我试过了:

Gson.fromJson(data, TempBean.class)

但无法解析。还尝试了Map.class并接受了Map<String, Person>,但无法解析。

然而,当我使用时:

Type dataType = new TypeToken<Map<String, Person>>() {}.getType();

然后,

Map<String, Person> tempMap = Gson.fromJson(data, dataType); 

我可以解析它..!

我想知道这两种方法有什么不同,我应该知道什么才能清楚地了解所有这些。

1 个答案:

答案 0 :(得分:1)

Google的官方解释是here