使用GSON 2.2.4反序列化复杂的json

时间:2015-06-05 07:31:16

标签: android json gson json-deserialization

我正在尝试使用GSON 2.2.4反序列化这个复杂的Json

    {
    "AUSMASS": {
        "KAPITEL": [
            {
                "KAP": "102",
                "KAG": "",
                .
                .
                .
            }
        ],
        "POSITION_TEXT": [
            {
                "MANDT": "500",
                "ID": "00181171",
                .
                .
                .
            }
        ],
        "POSITION": [
           {
                "MANDT": "500",
                "ID": "00180699",
                .
                .
                .
            }
        ]
        "KONDITION": [
            {
                "MANDT": "500",
                "ID": "00180699",
                .
                .
                .
            }
        ]
    }
}

我的POJO课程KAPITEL,POSITIONTEXT,POSITION和KONDITION

public class AusmassInfo {

    @Expose
    private ArrayList<KAPITEL> KAPITEL = new ArrayList<>();
    @SerializedName("POSITION_TEXT")
    @Expose
    private ArrayList<POSITIONTEXT> POSITIONTEXT = new ArrayList<>();
    @Expose
    private ArrayList<POSITION> POSITION = new ArrayList<>();
    @Expose
    private ArrayList<KONDITION> KONDITION = new ArrayList<>();


   ...Getters and Setters
}

这是主要的POJO,包括AUSMASS ......

public class Example {
    @Expose
    private AusmassInfo AUSMASS;

    /**
     * @return The AUSMASS
     */
    public AusmassInfo getAUSMASS() {
        return AUSMASS;
    }

    /**
     * @param AUSMASS The AUSMASS
     */
    public void setAUSMASS(AusmassInfo AUSMASS) {
        this.AUSMASS = AUSMASS;
    }

}

我试图以这种方式反序列化

            Gson gson = new Gson();

            Type type = new TypeToken<ArrayList<Example>>() {
            }.getType();
            bigObject = gson.fromJson(reader, type);

但我得到了空物。

任何人都可以帮我吗? 提前致谢。

2 个答案:

答案 0 :(得分:0)

默认情况下,Gson无法序列化泛型列表。但是有一个解决方法,在堆栈溢出时搜索泛型gson列表,我记得有人发布了一种让它工作的方法。

另一种方法是迭代json数组并序列化每个项目。

答案 1 :(得分:0)

  

指定的json是Object而不是Array。

这样就可以使用下面的代码片段

Gson gson = new Gson();
bigObject = gson.fromJson(reader, Example.class);