Android - 如何从JSON读取子数组值取决于所选项目

时间:2014-02-27 14:16:29

标签: android json listview

我有一个带有以下结构的JOSN文件

[
    {
        "category" : "Category - 1",
        "table":[
            {
                "id" : 1,
                "title" : "Sample Title 1"
            },
            {
                "id" : 2,
                "title" : "Sample Title 2"
            },
            {
                "id" : 3,
                "title" : "Sample Title 3"
            }
        ]
    },
    {
        "category": "Category - 2",
        "table":[
            {
                "id" : 1,
                "title" : "Sample Title 1"
            },
            {
                "id" : 2,
                "title" : "Sample Title 2"
            },
            {
                "id" : 3,
                "title" : "Sample Title 3"
            }
        ]
    }
]

首先,我将所有“类别”值加载到列表视图,例如“Category - 1”,“Category - 2”。 当我从listview中选择“Category-1”项时,我想只从“Category-1”表中加载/读取项目,当我从listview中选择“Category-2”项时,我想只加载/读取项目来自“Category - 2”表。

请告诉我如何阅读表格字段值。

2 个答案:

答案 0 :(得分:3)

只需解析JSON并将其添加到ListView的适配器中。

JSONArray categories = new JSONArray(jsonString);
for (int i = 0; i < categories.length(); i++) {
    JSONObject category = categories.getJSONObject(i);

    String categoryName = category.getString("category");
    JSONArray table = category.getJSONArray("table");
    for (int k = 0; k < table.length(); k++) {
        JSONObject object = table.getJSONObject(k);

        int id = object.getInt("id");
        String title = object.getString("title");
    }
}

答案 1 :(得分:0)

试试这个,这样你就可以获得所有类别和他的子项目。

    JSONArray arr = new JSONArray(json);
    HashMap<String, List<SubItem>> map = new HashMap<String, List<SubItem>>();
    for(int i=0; i<arr.length(); i++){
        JSONObject obj = arr.getJSONObject(i);
        String category = obj.getString("category");

        JSONArray table = obj.getJSONArray("table");

        List<SubItems> subITems = new ArrayList<SubItems>();
        for(int j=0; j<table.length(); j++){
            JSONObject item = table.getJSONObject(j);

            SubItem sub = new SubItem();
            sub.setId(item.getInt("id"));
            sub.setTitle(item.getString("title"));

            subITems.add(sub);
        }
        map.put(category, subITems);
    }