[英]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.