Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按类别进行的Android json解析_Android_Json_Android Layout_Android Intent_Android Listview - Fatal编程技术网

按类别进行的Android json解析

按类别进行的Android json解析,android,json,android-layout,android-intent,android-listview,Android,Json,Android Layout,Android Intent,Android Listview,我有一个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

我有一个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、BirdsImage等

如果我点击韵类,我应该能够在网格视图中获得所有子类

有人能帮忙吗

我试过:

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);
}
JSONArray ja=新的JSONArray(json);
int size=ja.length();
Log.d(“标记”,“元素数量”+ja.length());
对于(int i=0;i
在for循环中,使用

    JSONObject c = ja.getJSONObject(i);
然后使用

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

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

您可以使用HashMap存储单独的类别列表,并且您可以轻松地获得所需的类别列表,如T-e-PBS、Rymes等。

// 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) {

}
//其中包含类别类型的类别基础
HashMap类别=新建HashMap();
List cat_name=new ArrayList();
List subcat_name=new ArrayList();
试一试{
JSONObject脚本=新建JSONObject(“您的响应字符串”);
JSONArray listOfCategory=script.getJSONArray(“您的数组”);
对于(int j=0;j
您可以使用
ArrayLists的
HashMap

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");

如果你有两个以上的子类别怎么办?你会用if子句将它们添加到代码中吗?@santirivera92我给出了一种解决问题的方法。我们可以用多种方式来实现。我们可以动态存储多个类别。
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