使用retrofit2.0解析JSON对象

时间:2016-12-15 03:55:51

标签: android json parsing gson retrofit2

我尝试使用this指南后的改进2.0解析JSON对象,但它不起作用。我认为这是因为JSON格式存在差异。

这是一个嵌套的JSON对象,格式为:

{
    "SearchService": {
        "list_total_count": 531,
        "RESULT": {
            "CODE": "INFO-001",
            "MESSAGE": "SUCCESS"
        },
        "row": [{
            "ID": "1983",
            "NAME": "SAN",
            "NUM": "38",
        }, {
            "ID": "1984",
            "NAME": "DU",
            "NUM": "27",
        }]
    }
}

以下是使用SerializedName的类代码:

RowList.java

public class RowList {
    @SerializedName("row")
    @Expose
    private ArrayList<Row> rows= new ArrayList<>();

    public ArrayList<Row> getRows() {
        return rows;
    }

    public void setRows(ArrayList<Row> rows) {
        this.rows= rows;
    }
}

Row.java

public class Row{

    @SerializedName("ID")
    @Expose
    private String id;

    @SerializedName("NAME")
    @Expose
    private String name;

    @SerializedName("NUM")
    @Expose
    private String num;

    /*getter setter*/

}

1 个答案:

答案 0 :(得分:1)

阅读该指南。

  

创建Model类有两种方法。第一种方法是手动方法,它要求您学习如何使用Gson库。第二种方法是您也可以通过捕获JSON输出并使用jsonschema2pojo

自动生成所需的Java类。

看起来你已经尝试接近一个,但还没有(但是?)尝试阅读Gson文档。

好的,你有?:。这涵盖了Row内的对象,因此您还需要以下对象:

  • "row": [...]
  • "SearchService": {}

我不认为"RESULT": {}类是必要的。 RowList没问题。

例如,

List<Row>

(删除class Result { @SerializedName("CODE") String code; @SerializedName("MESSAGE") String message; } class SearchService { @SerializedName("list_total_count") long count; @SerializedName("RESULT") Result result; @SerializedName("row") private ArrayList<Row> rows= new ArrayList<>(); } 以获得简洁)

然后,Retrofit会使用@Expose