我的要求很简单,我在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”字段,它看起来如下所示,
我需要在单独的ListView中为每个单击的Clicked显示子类别。 但是,当我解析“shop_scat_id1name”字段时,数据在所有数组字段中获取,具有不同的类别名称,如下图所示,
当我点击第一个类别时,我所需的输出应该如下所示,对于基于子类别的其他类别,我的所需输出类似。
分类名称我点击 的裴家 子类别应该是
Cotton kurtis
Cotton Designer Kurtis
Soft Designer Kurtis
通过什么方式我必须修改JSON结构或编码部分需要做的任何事情? 需要帮助..
答案 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).
}