使用改造使用Jackson获取嵌套的JSON对象

时间:2016-03-21 10:29:30

标签: android nested jackson retrofit

我有api所有请求,如:

{
  "success": "true",
  "data": [],
  "errors": []
}

例如:

{
  "success": "true",
  "data": [
             {
                 "id": "666",
                 "name": "Cars",
                 "imgUrl": "/images/mod_catalog_prod/categories/no-image.jpg",
                 "descr": "",
                 "childRubricCount": 20
            },
            {
                 "id": "667",
                 "name": "Buses",
                 "imgUrl": "/images/mod_catalog_prod/categories/no-image.jpg",
                 "descr": "",
                 "childRubricCount": 14
           }
  ],
  "errors": []
}

此外,如果成功== true,则可以调用onResponse块,如果成功== false,则调用onFailure块,并使用来自json的错误变量的错误文本。 Api包含json响应中数据块的不同响应数据模型,我需要动态更改数据模型类。 有没有办法创造这样的东西?所有回复都对我有用。

1 个答案:

答案 0 :(得分:2)

试试这个

在您的gradle文件中添加 compile' com.google.code.gson:gson:2.6.2' 依赖项。

获得响应jsonObject后通过

public void onRequestSuccess(JSONObject jsonObject) {
    ModelItem item = new Gson().fromJson(jsonObject.toString(), ModelItem.class);
    List<ModelItem.DataItem> dataItems;
    List<ModelItem.ErrorItem> errorItems;

    if (item.getSuccess().equalsIgnoreCase("true")) {
        dataItems = item.getData();
        for (int i = 0; i < dataItems.size(); i++) {
            String name = dataItems.get(i).getName();
        }
    } else {
        errorItems = item.getErrors();
        for (int i = 0; i < errorItems.size(); i++) {
            String name = errorItems.get(i).getErrorMsg();
        }
    }
}

创建Pojo类ModelItem.java

import com.google.gson.annotations.Expose;
import com.google.gson.annotations.SerializedName;
import java.util.ArrayList;
import java.util.List;

public class ModelItem {

@SerializedName("success")
@Expose
private String success;
@SerializedName("data")
@Expose
private List<DataItem> data = new ArrayList<DataItem>();
@SerializedName("errors")
@Expose
private List<ErrorItem> errors = new ArrayList<ErrorItem>();

/**
 * @return The success
 */
public String getSuccess() {
    return success;
}

/**
 * @param success The success
 */
public void setSuccess(String success) {
    this.success = success;
}

/**
 * @return The data
 */
public List<DataItem> getData() {
    return data;
}

/**
 * @param data The data
 */
public void setData(List<DataItem> data) {
    this.data = data;
}

/**
 * @return The errors
 */
public List<ErrorItem> getErrors() {
    return errors;
}

/**
 * @param errors The errors
 */
public void setErrors(List<ErrorItem> errors) {
    this.errors = errors;
}

public class DataItem {

    @SerializedName("id")
    @Expose
    private String id;
    @SerializedName("name")
    @Expose
    private String name;
    @SerializedName("imgUrl")
    @Expose
    private String imgUrl;
    @SerializedName("descr")
    @Expose
    private String descr;
    @SerializedName("childRubricCount")
    @Expose
    private Integer childRubricCount;

    /**
     * @return The id
     */
    public String getId() {
        return id;
    }

    /**
     * @param id The id
     */
    public void setId(String id) {
        this.id = id;
    }

    /**
     * @return The name
     */
    public String getName() {
        return name;
    }

    /**
     * @param name The name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * @return The imgUrl
     */
    public String getImgUrl() {
        return imgUrl;
    }

    /**
     * @param imgUrl The imgUrl
     */
    public void setImgUrl(String imgUrl) {
        this.imgUrl = imgUrl;
    }

    /**
     * @return The descr
     */
    public String getDescr() {
        return descr;
    }

    /**
     * @param descr The descr
     */
    public void setDescr(String descr) {
        this.descr = descr;
    }

    /**
     * @return The childRubricCount
     */
    public Integer getChildRubricCount() {
        return childRubricCount;
    }

    /**
     * @param childRubricCount The childRubricCount
     */
    public void setChildRubricCount(Integer childRubricCount) {
        this.childRubricCount = childRubricCount;
    }
}

public class ErrorItem {

    @SerializedName("error_code")
    @Expose
    private String errorCode;
    @SerializedName("error_msg")
    @Expose
    private String errorMsg;

    /**
     * @return The errorCode
     */
    public String getErrorCode() {
        return errorCode;
    }

    /**
     * @param errorCode The error_code
     */
    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }

    /**
     * @return The errorMsg
     */
    public String getErrorMsg() {
        return errorMsg;
    }

    /**
     * @param errorMsg The error_msg
     */
    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }
}
}