我尝试使用以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中这样做。感谢您的时间。