如何处理几十种不同的JSON响应?

时间:2015-10-26 21:04:52

标签: java android json gson retrofit

在我的应用程序中,我从Web服务器请求JSON数据,响应几乎总是不同。

例如,一个响应可能如下所示:

{"success":true,"data":{"token_id":"pPt9AKl0Cg","token_key":"8ax224sFrJZZkStAQuER"}}

虽然另一个看起来像这样:

{"success":true,"data":{"user_id":"20","username":"Bob"}}

另一个可能看起来像这样:

{"success":true,"data":{"user_id":"20","stats":{"followers":"500","following":"12"}}}

以前,我为每种不同的响应类型创建了一个模型类(Java)。例如,对于上面的第一个响应,我的模型类可能如下所示:

public class MyResponseModel {
        private boolean success;
        private DataModel data;

    public static class DataModel {
        private String token_id;
        private String token_key;
    }

    ...
}

这真的是最好的方法吗?因为如果我为我的应用程序中的十几个+响应执行此操作,我将最终得到十几个+不同的模型类,每个不同的响应一个。

是否有解析JSON的替代方法?

感谢。

2 个答案:

答案 0 :(得分:1)

每种类型的响应都需要一个DTO或模型类。从/向json序列化/反序列化需要静态类型。您可以使用泛型来包装响应。重构您的代码将类似于:

public class MyResponseModel <T> {
        private boolean success;
        private T data;
} 
 public class DataModel {
        private String token_id;
        private String token_key;
 }

然后您的代码可以返回此方案的MyResponseModel<DataModel>对象。

如果您真的想为每种类型的响应使用一个类,则需要将所有响应表示为键值对,然后您可以拥有一个包含Map的类。我不会推荐这种方法,并且希望每种类型的响应都有一个类。

答案 1 :(得分:0)

查看https://github.com/jayway/JsonPath,它只在Java世界中,默认解决方案是序列化/反序列化。