当json对象与java对象不一致时,gson.fromJson

时间:2014-05-05 08:03:26

标签: java android json gson

假设我有一个班级:

class A {
    List<C> b;
}

class C {
    String str;
}

我有一个json字符串,其中包含以下内容:

{ 
    "b": [ 
        { ... },
        { ... }
     ]
}

所以做以下工作会很好:

Gson gson = new Gson();
gson.fromJson(jsonString, A.class);

但是现在我有一个更复杂的案例,我使用相同的json来提供更多数据,但我仍然想使用gson作为它非常好的库。 所以现在我的json如下:

{ 
    "b": [ 
        { ... },
        { ... }
     ],
    "c": 7
}

是否可以告诉gson对象忽略它无法评估的内容? 那么它只会从我的A课程或我使用@SerializedName指定的内容中获取它所知道的内容?

我使用JSONObject了解更原始的方式,但为了继续使用Gson,我必须将"b"嵌套在另一个级别才能使其正常工作,因为它需要一个带有一个对象数组的对象,使用JSONObject.get("b")将只给我一个数组。

UPDATE,更具体地说,我添加了一个我尝试使用的json对象

这个json是我开始使用的,只是一组b&#39; s,如果我运行它可以正常工作:

{
        "b": [
            {
                "str": "first string"
            }
        ]
}

这个json是一个更复杂的情况,我有一个b的列表,这正是gson需要的,但也是另一个不是我的A类特有的参数,这就是我希望gson忽略并表现得像第一种情况。

{
    "b": [
        {
            "str": "first string"
        }
    ],
    "c": 7
}

1 个答案:

答案 0 :(得分:0)

我们总是在解决这类问题的方法是定义占位符类,它能够获取数据,所以:

class A {
    List<C> b;
}

class C {
    String str;
}

class ContainerA extends HashMap<String, A>{
}

然后你做:

Gson gson = new Gson();
Map<String, A> javaMap = gson.fromJson(jsonString, ContainerA.class);

这是一种解决方法,但对于带有GsonHttpMessageConverter的Gson和Spring适用于Android的工作正常。