我开始使用Gson来解析json数据。
Jason的内容就像
{
“type”: “type1”,
“date”: “Tue, 16 May 2017 07:09:33 +0000”,
“body”:
{
“formatA_1”: “aaa”,
“formatA_2”: “bbbcccddd”
}
}
或
{
“type”: “type_2”,
“date”: “Tue, 16 May 2017 07:09:33 +0000”,
“body”:
{
“formatB_1”: “alpha”
}
}
目前有8种不同类型的不同类型。主要的不同是“身体”部分。
“body”部分可以具有不同的格式和不同的内容,即使是arraylist或null也是可能的。
所以我将数据类设计为
public class Data {
private String type;
private Long date;
private String body;
public String getType() {
return type;
}
public long getDate() {
return date;
}
public String getBody() {
return body;
}
}
首先我认为这取决于类型,后来我可以解析正文字符串,但得到了例外:
com.google.gson.JsonSyntaxException:
java.lang.IllegalStateException: Expected a string but was BEGIN_OBJECT at line 1 column 10 path $.body
这是我用嵌套体类修改Data类的唯一方法吗?
公共类数据{
private String type;
private Long date;
private Body body;
private class Body {
private String formatA_1;
private String formatA_2;
private String formatB_1;
//even for the list and other data members...
}
}
这个设计有点乱,因为它包含了不同“类型”(type1,type2,type3,...)的所有成员。 我希望基于不同的“类型”,我可以将身体解析为不同的对象(身体的POJO)。那可能吗?
我刚刚开始学习使用Gson而不知道如何进行更好的设计和解析。
非常感谢。
答案 0 :(得分:0)
在问及要求避免嵌套对象的问题中,只有两种方法可以解决这个问题,即手动解析数据,或在 POJO中使用 @Expose 标记否则你必须按原样创建一个完整的POJO。
虽然我推荐使用http://www.jsonschema2pojo.org/从json自动解析GSON POJO。
有关详细的解析示例,请参阅http://www.javadoc.io/doc/com.google.code.gson/gson/2.8.2
答案 1 :(得分:0)
此外,您可以将class Body
定义为通用类。
private String type;
private Long date;
private List<T> body;
您必须阅读有关如何解析泛型类的更多信息。