Android中单个项的JSON解析器

时间:2014-02-11 09:53:21

标签: android json listview

我的要求很简单,我在webserver中有一个JSON文件,我必须在android中解析它,我知道解析方法,但我必须在以下JSON文件中以不同的方式显示输出,

{
    "Productcategory": [
        {
            "shop_cat_id": "1",
            "shop_cat_name": "kurtis",
            "shop_scat_id1": "1",
            "shop_scat_id1name": "cotton kurtis",
            "shop_scat_id2": "2",
            "shop_scat_id2name": "Cotton Designer Kurtis",
            "shop_scat_id3": "3",
            "shop_scat_id3name": "soft Designer kurtis"
        },
        {
            "shop_cat_id": "2",
            "shop_cat_name": "Sarees",
            "shop_scat_id1": "1",
            "shop_scat_id1name": "Saree 1",
            "shop_scat_id2": "2",
            "shop_scat_id2name": "Saree 2",
            "shop_scat_id3": "3",
            "shop_scat_id3name": "Saree 3",
            "shop_scat_id4": "4",
            "shop_scat_id3name": "Saree 4"
        },
        {
            "shop_cat_id": "3",
            "shop_cat_name": "Anarkkali suits",
            "shop_scat_id1": "1",
            "shop_scat_id1name": "Readymade",
            "shop_scat_id2": "2",
            "shop_scat_id2name": "Stitched",
            "shop_scat_id3": "3",
            "shop_scat_id3name": "Unstitched"
        },
        {
            "shop_cat_id": "4",
            "shop_cat_name": "CottonLeggins",
            "shop_scat_id1": "1",
            "shop_scat_id1name": "LSize",
            "shop_scat_id2": "2",
            "shop_scat_id2name": "XLsize",
            "shop_scat_id3": "3",
            "shop_scat_id3name": "3XLsize",
            "shop_scat_id4": "4"
        },
        {
            "shop_cat_id": "5",
            "shop_cat_name": "PattialaPantsset",
        "shop_scat_id1": "1",
            "shop_scat_id1name": "LSize",
            "shop_scat_id2": "2",
            "shop_scat_id2name": "XLsize",
            "shop_scat_id3": "3",
            "shop_scat_id3name": "3XLsize",
            "shop_scat_id4": "4"
        },
        {
            "shop_cat_id": "6",
            "shop_cat_name": "Kids'AnarkkaliSuits",
        "shop_scat_id1": "1",
            "shop_scat_id1name": "LSize",
            "shop_scat_id2": "2",
            "shop_scat_id2name": "XLsize",
            "shop_scat_id3": "3",
            "shop_scat_id3name": "3XLsize",
            "shop_scat_id4": "4"
        }
    ]
}

我在单独的ListView中获取了“shop_cat_name”字段,它看起来如下所示, Category

我需要在单独的ListView中为每个单击的Clicked显示子类别。 但是,当我解析“shop_scat_id1name”字段时,数据在所有数组字段中获取,具有不同的类别名称,如下图所示,

output

当我点击第一个类别时,我所需的输出应该如下所示,对于基于子类别的其他类别,我的所需输出类似。

分类名称我点击 的裴家 子类别应该是

Cotton kurtis
Cotton Designer Kurtis
Soft Designer Kurtis

通过什么方式我必须修改JSON结构或编码部分需要做的任何事情? 需要帮助..

3 个答案:

答案 0 :(得分:1)

我猜你从JSON得到这样的vaule:String name = JSON.getString(“shop_scat_id1name”); 这是不对的。 等一下,我会给你一些例子。

我的英语非常差。非常抱歉。

首先 你应该创建一个这样存储价值的实体。

public class Productcategory implements Serializable{

/**
 * 
 */
private static final long serialVersionUID = 7249744975503046565L;

private String shop_cat_id;
private String shop_cat_name;
private String shop_scat_id1;
private String shop_scat_id1name;
private String shop_scat_id2;
private String shop_scat_id2name;
private String shop_scat_id3;
private String shop_scat_id3name;

...Ignore get and set method

}

二 你可以使用gson或使用大量的json.getString ....

    // this is your json,I replace it with ""
String jsondata="";
Gson gson = new Gson();
JsonParser parser = new JsonParser();
JsonArray Jarray = parser.parse(jsondata).getAsJsonArray();

ArrayList<Productcategory> pc_list= new ArrayList<Productcategory>();

for (JsonElement obj : Jarray) {
    Productcategory pc = gson.fromJson(obj, Productcategory.class);
    pc_list.add(pc);
}

第三

现在,您获得了一个列表,您可以将它用于ListView,如果要单击该项, 您应该使用pc_list.get(position)来获取Productcategory,这样您就可以填写详细信息页面。

我试图让你知道我在说什么。但我的英语很糟糕。

答案 1 :(得分:0)

您可以使用expandablelistview,其中您的组将成为主要类别,并且将显示onclick子类别。

要做到这一点,你需要做的是创建一个包含shop_cat_id,shop_cat_name,...等的产品对象,然后创建一个列表。

然后将此列表传递给BaseExpandableListAdapter,因为对象中的变量在getGroupView中保持其位置,将shop_cat_name设置为groupview,将其他三个子类别设置为getChildView。

答案 2 :(得分:0)

你需要用以下内容更改你的json,正如你在评论中提到你的子类别没有修复那么你必须发送一个jsonArray作为所有类别的内部。我为你写了一个:

"Productcategory": [
        {
            "shop_cat_id": "1",
            "shop_cat_name": "kurtis",
            "shop_scat_id1": "1",
            "SubCategory": [           

                  "cotton kurtis",
                  "Cotton Designer Kurtis",
                  "soft Designer kurtis"
            ]
    },
   ........
      // other jsonObject is same

你的代码中需要处理ID号码,因为你有一个从2开始的简单id号码。如果对我说有问题。

修改

要捕获SubCategory上的值,您必须使用以下代码:

JSONObject json = jsonarray.getJSONObject(i);
JSONArray SubCategoryArray = json.getJSONArray("SubCategory");

for (int i = 0 ; i < SubCategoryArray.length() ; i++)
   {

       map.put( i+1 , SubCategoryArray.getString(i)); 
       // with this code you have title and id of your subCategory in map
       // id start from 1 ( i + 1).

   }