Android之解析Json数组

标签: Android  Json  Array  JsonArray  Gson

在ListView显示数据库里所有数据的时候,因为数据库的数据是一条一条的记录,在后台返回的时候,我们往往是返回Json数组的形式,把每一条数据当作是一个数组元素保存起来。

先看下我们准备的Json数组:

[{
	"id": "37",
	"bianhao": "20187298632992f0af7d8df8898",
	"spname": "xianshqi",
	"miaoshu": "dianzi ",
	"kucun": "45",
	"jiage": "3333",
	"peisong": "maijia ",
	"lianxi": "255886",
	"shcool": "西藏"
}, {
	"id": "35",
	"bianhao": "2014042946h7oaat65",
	"spname": "狼蛛机械键盘",
	"miaoshu": "键盘",
	"kucun": "34",
	"jiage": "180",
	"peisong": "买家取货",
	"lianxi": "3453456345",
	"shcool": "呼和浩特"
}, {
	"id": "34",
	"bianhao": "2018082946h7oaat65",
	"spname": "面膜男女通用",
	"miaoshu": "面某",
	"kucun": "4590",
	"jiage": "45",
	"peisong": "买家取货",
	"lianxi": "234234",
	"shcool": "北京"
}, {
	"id": "33",
	"bianhao": "2018082946h78aat65",
	"spname": "阿迪达斯男士外套",
	"miaoshu": "男士外套",
	"kucun": "458",
	"jiage": "12",
	"peisong": "买家取货",
	"lianxi": "456783",
	"shcool": "广东"
}, {
	"id": "32",
	"bianhao": "2018082946h789at65",
	"spname": "丹尼尔惠灵顿",
	"miaoshu": "女士手表",
	"kucun": "1200",
	"jiage": "89",
	"peisong": "卖家配送",
	"lianxi": "7885675",
	"shcool": "四川"
}, {
	"id": "31",
	"bianhao": "2018082946h789gt65",
	"spname": "欧莱雅",
	"miaoshu": "男士洗面奶",
	"kucun": "99",
	"jiage": "46",
	"peisong": "快递发货",
	"lianxi": "123456",
	"shcool": "山东"
}]

这种Json数组应该如何进行解析:这次我使用的是Gson(谷歌的亲儿子,肯定好使),GsonFormat

Gson:compile 'com.google.code.gson:gson:2.8.5'

GsonFormat:在AndroidStdio安装插件哪里搜索就可以。

首先创建一个JsonBean.java的文件:在下图的位置按下command+N键盘(Mac系统)(Windows系统上按那个键我不清楚,大家可以百度下),选择GsonFormat。 再打开的窗口中选择setting,在新打开的窗口找到Gson选择单选框,点击Ok,在返回的窗口中把准备好的jsonArray数据复制到这个窗口,点击ok系统就会生成对应的set和get方法。

解析代码:

private List parseJson() {
        //Json的解析类对象
        JsonParser parser = new JsonParser();
        //将JSON的String 转成一个JsonArray对象
        JsonArray jsonArray = parser.parse(json).getAsJsonArray();

        Gson gson = new Gson();
        jsonBeanArrayList = new ArrayList<>();

        //循环遍历json数组
        for (JsonElement json : jsonArray) {
            //使用GSON,转成Bean对象
            JsonBean jsonBean = gson.fromJson(json, JsonBean.class);
            jsonBeanArrayList.add(jsonBean);
        }
        return jsonBeanArrayList;
    }

输出解析后的数据:

for (int i = 0; i < parseJson().size(); i++) {
            Log.e("Id",parseJson().get(i).getId());
            Log.e("编号",parseJson().get(i).getBianhao());
            Log.e("名称",parseJson().get(i).getSpname());
            Log.e("描述",parseJson().get(i).getMiaoshu());
            Log.e("库存",parseJson().get(i).getKucun());
            Log.e("价格",parseJson().get(i).getJiage());
            Log.e("配送",parseJson().get(i).getPeisong());
            Log.e("联系",parseJson().get(i).getLianxi());
            Log.e("学校",parseJson().get(i).getShcool());
        }

PS:这里for循环限定最大值为什么是parseJson().size()?因为我们需要确定Json数组有多少条元素,在我们解析的时候把每一条Json数组元素都加入到了jsonBeanArrayList这个集合里面,所以jsonBeanArrayList集合的长度就是Json数组的长度,所以这里使用的是parseJson().size()。这样不管增加多少JsonArray元素都可以完全解析。

输出效果图:

原文链接:加载失败,请重新获取