0

我正在尝试使用Gson库来解析一些 json 数据。来自服务器的响应可能是以下之一:

成功结果:

{myObject: {foo:"1", bar:"bleh"}}

故障结果:

{error: {message:"invalid token", code:320} }

似乎 Gson 只能处理一种返回类型,例如:

Gson gson = new Gson();
MyObject object = gson.fromJson(value, MyObject.class);

如何使用 Gson 正确解析提要中的数据/(错误),而不仅仅是自己解析 JSON?

4

2 回答 2

2

因为你不知道你会得到什么,所以很难使用像 Gson 这样的东西并反序列化为 POJO。您实际上得到了一个带有“myObject”或“error”字段的对象。一种方法是简单地创建一个综合对象。Gsonnull在解析 JSON 时设置任何不存在的字段,所以这样的事情可以正常工作:

class JSONResponse {
    private MyObject myObject;
    private Error error;

    static class MyObject {
        String foo;
        String bar;
    }

    static class Error {
        String message;
        int code;
    }

    public boolean isError() {
        return error != null;
    }

    // Getters that access the fields of the objects
    // ...
}
于 2013-02-27T22:53:36.663 回答
0

谢谢@Brian。我最终只是像这样解析

JsonParser parser = new JsonParser();
    parser.parse(value).getAsJsonObject();

然后检查错误节点是否存在,以便我可以抛出服务器异常。如果节点不存在,那么我从那里使用 Gson。

Gson gson = new GsonBuilder().create();
    ArrayList<GridItemVo> list = gson.fromJson(value, new TypeToken<ArrayList<GridItemVo>>(){}.getType());
于 2013-02-27T23:29:53.857 回答