Android:使用Gson

时间:2017-11-01 15:51:00

标签: android gson

我开始使用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而不知道如何进行更好的设计和解析。

非常感谢。

2 个答案:

答案 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;

您必须阅读有关如何解析泛型类的更多信息。