如何使用GSON解析具有类似JSON容器结构的不同嵌入式JSON类型

时间:2017-07-07 15:49:59

标签: java json data-structures gson

我尝试使用以JSON格式发送所有内容的网站API来处理数据。他们的格式如下:

类型1:

{
    "success": true,
    "message": "",
    "result": 
        {
            "Date": "2017-07-07T13:02:40.123",
            "Datatype1" : "type1",
            "Data1": 1.00,
            "Datatype2" : "type2",
            "Data1": 2.00
        }
}

Type 1 Class def:

public class Type1 {

    private String date;
    private String datatype1;
    private Double data1;
    private String datatype2;
    private Double data2;

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }
    (rest of the getters/setters)
}

public class Type1Container {
    private String success;
    private String message;
    private Type1 result;

    (rest of the getters/setters) 

    public Type1 getResult() {
        return this.result
    }
}

类型2:

{
    "success": true,
    "message": "",
    "result": 
        {
            "Date": "2017-07-07T13:02:40.123",
            "RandomInt" : 1,
            "RandomBool" : true,
            "RandomDouble": 1.00,
            "RandomString" : "help"
        }
}

Type 2 class def:

public class Type2 {

    private String date;
    private int randomInt;
    private Boolean randomBool;
    private double randomDouble;
    private String randomString;

    public String getDate() {
        return date;
    }

    public void setDate(String date) {
        this.date = date;
    }
    (rest of the getters/setters)
}

public class Type2Container {
    private String success;
    private String message;
    private Type2 result;

    (rest of the getters/setters) 

    public Type2 getResult() {
        return this.result
    }
}

它不仅限于2种数据类型,因为它们具有多种类型的数据,这些数据在给定特定查询的情况下类似地打包到JSON中。它们都有成功标志,消息和各种结果类型。现在我对每种类型的数据都有两个类。对应于"结果"的类。数据结构和容器类,其中该类声明为"结果"。但由于存在大量不同的数据类型,因此它有点混乱。但由于所有数据都采用相同的容器格式,我想知道是否有一种有效的方法来概括它。可能是在将JSON字符串解析为Java对象时将类作为参数传递。

我使用GSON将字符串解压缩到类中:

String jsonString; //assume this is already set
Gson gson = new Gson();
Type1 data = gson.fromJSON(jsonString, Type1Container.class).getResult();

我想代替使用特定的typeContainer类,能够像Container.class那样以某种方式知道内部数据类型已经存在,但是我不确定是否会这样做#39可能。但它应该是可能的,因为我认为编译器只需要知道为每个对象分配多少空间。

我得到的一些数据也是数据类型列表的形式,我假设它必须从具有

的不同通用Container类继承。
List<RandomObjectTypeX> result;

而不仅仅是对象本身。但是在一天结束时,我只想要一种有效的方法来处理来自JSON字符串的大量数据类型 - &gt;除非我需要,否则每次处理不同的数据类型时,Java对象都不需要提供带有冗余代码的2个名称。我知道使用动态语言会更容易,因为你不需要声明任何内容,但我试图制作一个原生的Android应用程序,所以我想在java中这样做。感谢您的时间。

0 个答案:

没有答案