簡體   English   中英

在Retrofit2中如何解析動態內部內長數組響應

[英]How to Parse dynamic inner lnner length Arrays response in retrofit2

我沉醉在一個奇怪的問題,在分析json通過響應retrofit2 實際上,我有一個父類別,它具有不同的子類別,這些子類別可以變化(動態)而不是固定的。 一個父類別有2個子類別,其他父類別有5個或可能是1個子類別。 因此,這方面的反應正在到來。

我正在使用翻新和gson庫來獲取json響應。

以下是我已經使用過的一些代碼片段

public class CategoryDetails {

    @SerializedName("icon")
    @Expose
    private String icon;
    @SerializedName("childs")
    @Expose
    private List<ChildCategoryDetail> childList;
    @SerializedName("categories_id")
    @Expose
    private String id;
    @SerializedName("image")
    @Expose
    private String image;
    @SerializedName("categories_name")
    @Expose
    private String name;
    @SerializedName("parent_id")
    @Expose
    private String parentId;
    @SerializedName("total_products")
    @Expose
    private String totalProducts;

    public String getTotalProducts() {
        return totalProducts;
    }

    public void setTotalProducts(String totalProducts) {
        this.totalProducts = totalProducts;
    }

    public List<ChildCategoryDetail> getChildList() {
        return childList;
    }

    public void setChildList(List<ChildCategoryDetail> childList) {
        this.childList = childList;
    }
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getParentId() {
        return parentId;
    }

    public void setParentId(String parentId) {
        this.parentId = parentId;
    }


    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }


}

及其子類別

public class ChildCategoryDetail {


    @SerializedName("icon")
    @Expose
    private String icon;
    @SerializedName("categories_id")
    @Expose
    private String id;
    @SerializedName("image")
    @Expose
    private String image;
    @SerializedName("categories_name")
    @Expose
    private String name;
    @SerializedName("parent_id")
    @Expose
    private String parentId;
    @SerializedName("total_products")
    @Expose
    private String totalProducts;

    public String getTotalProducts() {
        return totalProducts;
    }

    public void setTotalProducts(String totalProducts) {
        this.totalProducts = totalProducts;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getImage() {
        return image;
    }

    public void setImage(String image) {
        this.image = image;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getParentId() {
        return parentId;
    }

    public void setParentId(String parentId) {
        this.parentId = parentId;
    }


    public String getIcon() {
        return icon;
    }

    public void setIcon(String icon) {
        this.icon = icon;
    }



}

我在下面使用它的邏輯

// Get CategoriesList from AppContext
        allCategoriesList = ((App) getContext().getApplicationContext()).getCategoriesList();

        int size = allCategoriesList.size();
        allSubCategoriesList = new ArrayList<>();

        // Get SubCategoriesList from AllCategoriesList
        for (int i=0;  i<allCategoriesList.size();  i++) {
            int sizeStr = allCategoriesList.get(i).getChildList().size();
            for (int j=0;j<allCategoriesList.get(i).getChildList().size();j++) {
                allSubCategoriesList.add(allCategoriesList.get(i).getChildList().get(j));
            }

        }

從以上邏輯來看,我只能通過子類別的第一級而不是內部第二或第三級,依此類推...

那么json是

{
    "success": "1",
    "data": [
        {
            "categories_id": 3,
            "categories_name": "Boy's Clothing",
            "parent_id": 0,
            "image": "images/media/2019/07/yvWJL03110.png",
            "icon": "images/media/2019/07/yvWJL03110.png",
            "vendors_id": 3,
            "total_products": 16,
            "childs": [
                {
                    "categories_id": 22,
                    "categories_name": "Boy Polo shirts",
                    "parent_id": 3,
                    "image": "images/media/2019/07/yvWJL03110.png",
                    "icon": "images/media/2019/07/yvWJL03110.png",
                    "vendors_id": 4,
                    "total_products": 4,
                    "childs": [
                        {
                            "categories_id": 48,
                            "categories_name": "Boy Polo Shirts sub-1",
                            "parent_id": 22,
                            "image": "images/media/2019/07/yvWJL03110.png",
                            "icon": "images/media/2019/07/fyprD03510.png",
                            "vendors_id": 5,
                            "total_products": 0
                        },
                        {
                            "categories_id": 49,
                            "categories_name": "Boy Polo Shirts sub-2",
                            "parent_id": 22,
                            "image": "images/media/2019/07/yvWJL03110.png",
                            "icon": "images/media/2019/07/fyprD03510.png",
                            "vendors_id": 5,
                            "total_products": 0
                        }
                    ]
                },
                {
                    "categories_id": 23,
                    "categories_name": "Boy Casual Shirts",
                    "parent_id": 3,
                    "image": "images/media/2019/07/yvWJL03110.png",
                    "icon": "images/media/2019/07/yvWJL03110.png",
                    "vendors_id": 4,
                    "total_products": 5
                },
                {
                    "categories_id": 24,
                    "categories_name": "Boy Pants & Jeans",
                    "parent_id": 3,
                    "image": "images/media/2019/07/yvWJL03110.png",
                    "icon": "images/media/2019/07/yvWJL03110.png",
                    "vendors_id": 4,
                    "total_products": 4
                },
                {
                    "categories_id": 25,
                    "categories_name": "Boy Shoes",
                    "parent_id": 3,
                    "image": "images/media/2019/07/yvWJL03110.png",
                    "icon": "images/media/2019/07/yvWJL03110.png",
                    "vendors_id": 4,
                    "total_products": 3
                }
            ]
        },
        {
            "categories_id": 4,
            "categories_name": "Girl's Clothing",
            "parent_id": 0,
            "image": "images/media/2019/07/yvWJL03110.png",
            "icon": "images/media/2019/07/yvWJL03110.png",
            "vendors_id": 3,
            "total_products": 6,
            "childs": [
                {
                    "categories_id": 26,
                    "categories_name": "Dresses & Rompers",
                    "parent_id": 4,
                    "image": "images/media/2019/07/yvWJL03110.png",
                    "icon": "images/media/2019/07/yvWJL03110.png",
                    "vendors_id": 4,
                    "total_products": 3
                },
                {
                    "categories_id": 27,
                    "categories_name": "Shorts & Skirts",
                    "parent_id": 4,
                    "image": "images/media/2019/07/yvWJL03110.png",
                    "icon": "images/media/2019/07/yvWJL03110.png",
                    "vendors_id": 4,
                    "total_products": 3
                },
                {
                    "categories_id": 28,
                    "categories_name": "Sweaters",
                    "parent_id": 4,
                    "image": "images/media/2019/07/yvWJL03110.png",
                    "icon": "images/media/2019/07/yvWJL03110.png",
                    "vendors_id": 4,
                    "total_products": 0
                }
            ]
        }
    ],
    "message": "Returned all categories.",
    "categories": 2
}

我想進入所有內部層次,我也想要針對與category_id關聯的類別的產品

試試這個偽代碼

void main() {

    ArrayList<Object> mainChilds = new ArrayList<Object>();

    /* Replace Object with your pojo */
    ArrayList<Object> allSubCategoriesList = new ArrayList<>();

    allSubCategoriesList.addAll(getSubChilds(mainChilds));
}

ArrayList<Object> getSubChilds(ArrayList<Object> childs){
    /* Replace Object with your pojo */
    ArrayList<Object> subChilds = new ArrayList<>();

    // Get SubCategoriesList from AllCategoriesList
    for (int i = 0; i < childs.size(); i++) {
        //// add the Child to the list is you want
        subChilds.add(childs.get(i));

        /// check the is there are subChilds exists or not
        if(childs.get(i).getSubChilds().size > 0) {
            ///// pass those subchilds to function
            subChilds.addAll(getSubChilds(childs.get(i).getSubChilds()));
        }
    }

    return subChilds;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM