【问题标题】:Android json parsing by category wiseAndroid json按类别解析
【发布时间】:2013-09-23 06:02:58
【问题描述】:

我有一个如下的 Json 数组:

[{"item":{"category Name":"T-e-PBS","SubCategory Name":"T-e-PBS"}},
{"item":{"category Name":"T-e-PBS","SubCategory Name":"Animals"}},
{"item":{"category Name":"T-e-PBS","SubCategory Name":"Birds"}},
{"item":{"category Name":"T-e-PBS","SubCategory Name":"Vegetables"}},
{"item":{"category Name":"T-e-PBS","SubCategory Name":"Colors"}},
{"item":{"category Name":"Rhymes","SubCategory Name":"Rhymes"}},
{"item":{"category Name":"Rhymes","SubCategory Name":"Animated Rhymes"}},
{"item":{"category Name":"Rhymes","SubCategory Name":"Cartoon Rhymes"}},
{"item":{"category Name":"Rhymes","SubCategory Name":"Prayers"}}]

我已经尝试过,但不知道如何获取类别方面的信息,因为我在类别下有很多子类别:

我想解析这个 JSON 字符串并根据类别填充数据。

如果我单击 T-e-PBS 按钮,我应该能够在 gridview 中获取所有子类别,例如 gridview 中的 AnimalsImage、BirdsImages 等。

如果我点击 Rhymes 类别,我应该能够在 gridview 中获得所有子类别。

有人可以帮忙吗?

我试过了:

JSONArray ja = new JSONArray(json);
int size = ja.length();
Log.d("tag","No of Elements " + ja.length());
for (int i = 0; i < size; i++) {
    String str = ja.getString(i);
}

【问题讨论】:

    标签: android json android-layout android-intent android-listview


    【解决方案1】:

    在 for 循环中,使用检索所需的 JSON 对象

        JSONObject c = ja.getJSONObject(i);
    

    然后将 Json 项存储在一个变量中,

        String str = c.getString("category Name");
    

    JSON 对象使用{ 表示。因此,根据您的 JSON 结构,解析它并检索所需的项目。

    【讨论】:

      【解决方案2】:

      你可以使用HashMap来存储单独的Category List,你可以很容易的得到想要的Category列表,比如T-e-PBS、Rhymes等。

      // Which hold the category basis of category Type
      HashMap<String, List<String>> category = new HashMap<String, List<String>>();
      List<String> cat_name = new ArrayList<String>();
      List<String> subcat_name = new ArrayList<String>();
      try {
          JSONObject script = new JSONObject("YOUR RESPONSE STRING");
          JSONArray listOfCategory = script.getJSONArray("YOUR_ARRAY");
      
          for (int j = 0; j < listOfCategory.length(); j++) {
              JSONObject item = listOfCategory.getJSONObject(j).getJSONObject("item");
              String cat = item.getString("category Name");
              if (cat.equalsIgnoreCase("T-e-PBS")) {
                  cat_name.add(item.getString("SubCategory Name"));
              } else if (cat.equalsIgnoreCase("Rhymes")) {
                  subcat_name.add(item.getString("SubCategory Name"));
              }
          }
          category.put("T-e-PBS", cat_name);
          category.put("Rhymes", subcat_name);
      
          // To get the according to Category Name
          List<String> retrieveCatList1 = category.get("T-e-PBS");//Key is T-e-PBS
          List<String> retrieveCatList2 = category.get("Rhymes");//Key is Rhyme
      } catch (Exception e) {
      
      }
      

      【讨论】:

      • 如果您有超过 2 个子类别怎么办?你会用 if 子句将它们添加到代码中吗?
      • @santirivera92 我给出了解决问题的方法..我们可以通过多种方式来解决..我们可以动态存储多个类别。
      【解决方案3】:

      您可以使用HashMapArrayLists

      HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
          try {
      
              JSONArray array = new JSONArray(str); 
              // Where str is your response in String form
              for (int i=0; i<array.length(); i++){
                  String category = item.getString("category Name");
                  String subcategory = item.getString("SubCategory Name");
                  ArrayList<String> categoryFromMap = map.get("category");
                  if (categoryFromMap == null){
                      // Not initiated
                      categoryFromMap = new ArrayList<String>();
                  }
                  categoryFromMap.put(subcategory);
                  map.put(category, categoryFromMap);
              }
          } catch (JSONException ex){
              ex.printStackTrace();
          }
      // Accessing your data
      for (String key : map.keySet()){
          // key contains your category names
          ArrayList<String> subcategories = map.get(key);
          Log.d("CATEGORY", key);
          for (String subcat : subcategories){
              Log.d("SUBCATEGORY", subcat);
          }
      }
      // Getting a single category
      ArrayList<String> rhymes = map.get("Rhymes");
      

      Log.d 语句应该给出这样的输出:

      CATEGORY T-e-PBS
      SUBCATEGORY T-e-PBS
      SUBCATEGORY Animals
      SUBCATEGORY Birds
      SUBCATEGORY Vegetables
      SUBCATEGORY Colors
      CATEGORY Rhymes
      SUBCATEGORY Rhymes
      SUBCATEGORY Animated Rhymes
      SUBCATEGORY Cartoon Rhymes
      SUBCATEGORY Prayers
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多