2017-09-01 59 views
-2

我有以下JSON结构:地图多层次的JSON字符串类对象在Java中

{ 
    "result": { 
     "category": [{ 
       "id": "3", 
       "name": "category name", 
       "slug": "sllug", 
       "image": "imageurl", 
       "sub-categories": [{ 
        "id": "3", 
        "name": "category name", 
        "slug": "sllug", 
        "image": "imageurl", 
        "sub-categories": [{ 
         "id": "3", 
         "name": "category name", 
         "slug": "sllug", 
         "image": "imageurl", 
         "sub-categories": [] 
        }] 
       }] 
      }, 

      { 
       "id": "3", 
       "name": "category name", 
       "slug": "sllug", 
       "image": "imageurl", 
       "sub-categories": [] 
      } 
     ] 
    } 
} 

enter image description here

我需要与上述JSON创建类。

我创建了HomeCategoryModelHomeSubCategoryModel两个类。

每个级别可能有多个子类别。

如何将这种类型的json映射到类中。

HomeCategoryModel类:

public class HomeCategoryModel { 
    public int Id; 
    public String Name; 
    public String Slug; 
    public String ImageUrl; 
    public ArrayList<HomeSubCategoryModel> SubCategories; 

    //... 
    //getter, setter 
} 

HomeSubCategory类:

public class HomeSubCategoryModel { 
    public int Id; 
    public String Name; 
    public String Slug; 
    public String ImageUrl; 
    public ArrayList<HomeSubCategoryModel> SubCategories; 

    //getter setter 
} 

我曾尝试使用递归函数像这样来分析,但似乎并没有工作:

JSONObject allLists = jsonObject.getJSONObject("result"); 
    JSONArray catArray = allLists.getJSONArray("category"); 
    ArrayList<HomeCategoryModel> categoryList = new ArrayList<HomeCategoryModel>(); 
    for (int i = 0; i < catArray.length(); i++) { 
     JSONObject jObj = catArray.getJSONObject(i); 
     HomeCategoryModel categoryModel = new HomeCategoryModel(); 
     categoryModel.setId(Integer.parseInt(jObj.getString("id"))); 
     categoryModel.setName(jObj.getString("name")); 
     categoryModel.setSlug(jObj.getString("slug")); 
     categoryModel.setImageUrl(jObj.getString("image")); 


     JSONArray productsArray = jObj.getJSONArray("sub-categories"); 
     if (productsArray.length() > 0) { 
      parseSubCategories(productsArray); 
     } 

     categoryList.add(categoryModel); 
    } 

和:

public static ArrayList<HomeSubCategoryModel> parseSubCategories(JSONArray arr) { 
    ArrayList<HomeSubCategoryModel> subLists = new ArrayList<HomeSubCategoryModel>(); 

    for (int i = 0; i < arr.length(); i++) { 
     try { 
      JSONObject childObj = arr.getJSONObject(i); 
      HomeSubCategoryModel categoryModel = new HomeSubCategoryModel(); 
      categoryModel.setId(Integer.parseInt(childObj.getString("id"))); 
      categoryModel.setName(childObj.getString("name")); 
      categoryModel.setSlug(childObj.getString("slug")); 
      categoryModel.setImageUrl(childObj.getString("image")); 
      JSONArray subArray = childObj.getJSONArray("sub-categories"); 
      if (subArray.length() > 0) { 
       parseSubCategories(subArray); 
      } 
      subLists.add(categoryModel); 
     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 
    } 

    return subLists; 

} 

请给我建议。谢谢。

+0

什么是在控制台上的错误? –

+0

没有错误。我正在研究如何在单个对象中解析多级子类别,因为在子类别内有多个子类别等等。 –

回答

1

如果你想使用Gson,那么我可以建议像下面这样的东西。 生成你的POJO这样

package com.example; 

    import com.google.gson.annotations.Expose; 
    import com.google.gson.annotations.SerializedName; 

    public class Example { 

    @SerializedName("result") 
    @Expose 
    private Result result; 

    public Result getResult() { 
     return result; 
    } 

    public void setResult(Result result) { 
     this.result = result; 
    } 

    public class Result { 

     @SerializedName("category") 
     @Expose 
     private List <Category> category = null; 

     public List <Category> getCategory() { 
     return category; 
     } 

     public void setCategory(List <Category> category) { 
     this.category = category; 
     } 

    } 
    public class Category { 

     @SerializedName("id") 
     @Expose 
     private String id; 
     @SerializedName("name") 
     @Expose 
     private String name; 
     @SerializedName("slug") 
     @Expose 
     private String slug; 
     @SerializedName("image") 
     @Expose 
     private String image; 
     @SerializedName("sub-categories") 
     @Expose 
     private List <SubCategory> subCategories = null; 

     public String getId() { 
     return id; 
     } 

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

     public String getName() { 
     return name; 
     } 

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

     public String getSlug() { 
     return slug; 
     } 

     public void setSlug(String slug) { 
     this.slug = slug; 
     } 

     public String getImage() { 
     return image; 
     } 

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

     public List <SubCategory> getSubCategories() { 
     return subCategories; 
     } 

     public void setSubCategories(List <SubCategory> subCategories) { 
     this.subCategories = subCategories; 
     } 
    } 
     public class SubCategory_ { 

     @SerializedName("id") 
     @Expose 
     private String id; 
     @SerializedName("name") 
     @Expose 
     private String name; 
     @SerializedName("slug") 
     @Expose 
     private String slug; 
     @SerializedName("image") 
     @Expose 
     private String image; 
     @SerializedName("sub-categories") 
     @Expose 
     private List <Object> subCategories = null; 

     public String getId() { 
     return id; 
     } 

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

     public String getName() { 
     return name; 
     } 

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

     public String getSlug() { 
     return slug; 
     } 

     public void setSlug(String slug) { 
     this.slug = slug; 
     } 

     public String getImage() { 
     return image; 
     } 

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

     public List <Object> getSubCategories() { 
     return subCategories; 
     } 

     public void setSubCategories(List <Object> subCategories) { 
     this.subCategories = subCategories; 
     } 

     } 
} 

然后

Gson gson = new Gson(); 
Example exp = gson.fromJson("your json string",Example.class); 

和你做。

+0

这是我正在寻找。这是完美的。非常感谢。投票并标记为答案。我用这个来获得最后一个子类别。 'example.result.category.get(0).subCategories.get(0).subCategories.get(0)' 还有一个问题。如何从'LinkedTreeMap'获取键值。 –

相关问题