【问题标题】:JSON object parsing using retrofit2.0使用retrofit2.0解析JSON对象
【发布时间】:2016-12-15 03:55:50
【问题描述】:

我正在尝试按照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*/

}

【问题讨论】:

  • Retrofit 不解析 JSON。格森可以。您可以使用此站点来获得良好的开端。 jsonschema2pojo.org
  • 注意:"NUM":"38",
  • 我正在使用 com.squareup.retrofit2:converter-gson:2.0.2 库
  • 对。因此,您应该阅读 Gson 文档以了解如何将 JSON 转换为 Java 对象。 Retrofit 仅用于通过网络进行通信。 github.com/google/gson/blob/master/UserGuide.md

标签: android json parsing gson retrofit2


【解决方案1】:

阅读该指南。

有两种创建模型类的方法。第一种方式是手动方式,需要您学习如何使用Gson 库。第二种方法是您还可以通过捕获 JSON 输出并使用 jsonschema2pojo

来自动生成所需的 Java 类

看起来您已经尝试过方法一,但还没有(还没有?)尝试阅读 Gson 文档。


好的,你有一个Row。这涵盖了"row": [...] 中的对象,因此您还需要以下对象:

  • "SearchService": {}
  • "RESULT": {}

我认为RowList 类是不必要的。 List&lt;Row&gt; 很好。

例如,

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<>();
}

(为了简洁,删除了@Expose

然后,Retrofit 将使用 Call&lt;SearchService&gt;

【讨论】:

    猜你喜欢
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多