类似于解析json数据的框架有很多,常用的就是Gson,使用起来特别的方便,同时,还拥有很好的可操作性,今天就来说说怎么用Gson去解析一个json数组。使用Gson之前,需要下载一个gson.jar的jar包。具体的自己去网上下载,有很多。

首先看看数据源

{"a": [{"numid": "1","name": "艾勇","abbreviation": "aiyong","photo": "/test/qingqixie/Public/Upload/niul7b2sdy.jpg"},{"numid": "2","name": "安京哲","abbreviation": "anjingzhe","photo": "/test/qingqixie/Public/Upload/tfnc4pko7n11ul.jpg"}],"b": [{"numid": "351","name": "白雪剑","abbreviation": "baixuejian","photo": "/test/qingqixie/Public/Upload/31dl12sfmjo.png"},{"numid": "3","name": "白振亮","abbreviation": "baizhenliang","photo": "/test/qingqixie/Public/Upload/rrqixinqap.jpg"},{"numid": "4","name": "毕伟","abbreviation": "biwei","photo": "/test/qingqixie/Public/Upload/7rhytjvhmg8q.jpg"}],"c": [{"numid": "5","name": "曹恒海","abbreviation": "caohenghai","photo": "/test/qingqixie/Public/Upload/0iru1ef1w0k58.jpg"},{"numid": "6","name": "曹润星","abbreviation": "caorunxing","photo": "/test/qingqixie/Public/Upload/mdk1rliogrk.jpg"},{"numid": "377","name": "曹显龙","abbreviation": "caoxianlong","photo": ""},{"numid": "447","name": "测试用户","abbreviation": "ceshiyonghu","photo": ""},{"numid": "456","name": "测试专员","abbreviation": "ceshizhuanyuan","photo": ""},{"numid": "7","name": "柴宁","abbreviation": "chaining","photo": "/test/qingqixie/Public/Upload/nqyrnb2gahql.jpg"},{"numid": "8","name": "常传泉","abbreviation": "changchuanquan","photo": "/test/qingqixie/Public/Upload/rbbf5xpwn7a.jpg"},{"numid": "453","name": "查芃","abbreviation": "chapeng","photo": ""},{"numid": "13","name": "陈锴","abbreviation": "chen","photo": ""},{"numid": "16","name": "陈琪","abbreviation": "chen","photo": "/test/qingqixie/Public/Upload/agogbyaf9tmfwjqf.jpg"},{"numid": "10","name": "陈飞","abbreviation": "chenfei","photo": "/test/qingqixie/Public/Upload/pi6aa9p5q7envo2k.jpg"},{"numid": "413","name": "成建新","abbreviation": "chengjianxin","photo": ""},{"numid": "21","name": "程晟","abbreviation": "chengsheng","photo": "/test/qingqixie/Public/Upload/hkthw4jent6czg.jpg"},{"numid": "22","name": "程树森","abbreviation": "chengshusen","photo": "/test/qingqixie/Public/Upload/kf7278h7t832u6.jpg"},{"numid": "458","name": "程序员","abbreviation": "chengxuyuan","photo": ""},{"numid": "11","name": "陈海滨","abbreviation": "chenhaibin","photo": ""},{"numid": "432","name": "陈捷","abbreviation": "chenjie","photo": ""},{"numid": "12","name": "陈津川","abbreviation": "chenjinchuan","photo": "/test/qingqixie/Public/Upload/59amjj1fe3f.jpg"},{"numid": "14","name": "陈娜娜","abbreviation": "chennana","photo": "/test/qingqixie/Public/Upload/fq82mj0xpt.jpg"},{"numid": "15","name": "陈鹏","abbreviation": "chenpeng","photo": ""},{"numid": "17","name": "陈青溪","abbreviation": "chenqingxi","photo": "/test/qingqixie/Public/Upload/r9a3wtcf88b.jpg"},{"numid": "19","name": "陈奕超","abbreviation": "chenyichao","photo": "/test/qingqixie/Public/Upload/izsp4r3yx.jpg"},{"numid": "20","name": "陈宗敏","abbreviation": "chenzongmin","photo": "/test/qingqixie/Public/Upload/syewiyta6g42cv8.jpg"},{"numid": "9","name": "车永超","abbreviation": "cheyongchao","photo": "/test/qingqixie/Public/Upload/sj68k9ope6r.jpg"},{"numid": "23","name": "迟迅","abbreviation": "chixun","photo": ""},{"numid": "24","name": "褚海涛","abbreviation": "chuhaitao","photo": "/test/qingqixie/Public/Upload/8bwltpuwf.jpg"},{"numid": "26","name": "崔凤祥","abbreviation": "cuifengxiang","photo": "/test/qingqixie/Public/Upload/g48ihbkfd2itf43.jpg"},{"numid": "27","name": "崔锦锋","abbreviation": "cuijinfeng","photo": ""},{"numid": "28","name": "崔亚强","abbreviation": "cuiyaqiang","photo": "/test/qingqixie/Public/Upload/jcpfeegotnik1pp.jpg"},{"numid": "397","name": "崔艺","abbreviation": "cuiyi","photo": "/test/qingqixie/Public/Upload/3kt4hrsm3qmfb5.jpg"}],"d": [{"numid": "29","name": "戴新民","abbreviation": "daixinmin","photo": "/test/qingqixie/Public/Upload/vnndoq3rw8ekk.jpg"},{"numid": "30","name": "邓丽","abbreviation": "dengli","photo": "/test/qingqixie/Public/Upload/hnow6jn58k.jpg"},{"numid": "32","name": "丁炜","abbreviation": "dingwei","photo": "/test/qingqixie/Public/Upload/qt9tsrsied.jpg"},{"numid": "440","name": "董梦石","abbreviation": "dongmengshi","photo": "/test/qingqixie/Public/Upload/r0vsa2w39xq07.png"},{"numid": "33","name": "杜锴","abbreviation": "du","photo": "/test/qingqixie/Public/Upload/ytig406nljeyef.jpg"},{"numid": "34","name": "段宝平","abbreviation": "duanbaoping","photo": "/test/qingqixie/Public/Upload/rv7az0zbo.jpg"},{"numid": "35","name": "段海鹰","abbreviation": "duanhaiying","photo": "/test/qingqixie/Public/Upload/xbquyz6kmga28.jpg"},{"numid": "36","name": "段江","abbreviation": "duanjiang","photo": ""},{"numid": "403","name": "段炼","abbreviation": "duanlian","photo": "/test/qingqixie/Public/Upload/curi2er7ti.jpg"},{"numid": "37","name": "段拓文","abbreviation": "duantuowen","photo": "/test/qingqixie/Public/Upload/jstsdb0afmu4xha.jpg"}]
}

这个是一个比较具有代表性的json数据。先大体的分析一下数据,最外面的是一个json对象,里面有四个json数组。那么进行第一、步,先建立实体类,当然了,这么多的数据,不可能让我们一个个的去写,我们这里要引用一个工具,他会帮我生成实体类。
网址如下:http://www.bejson.com/json2javapojo/

这里为了方便,我就把这个数据放在了assets目录下,取名为text.txt 。

好了,数据源有了,实体类也建好了,那么就可以开始我们的编码了。首先是从assets取出数据,代码如下:

try {String data;InputStream is;is=getResources().getAssets().open("text.txt");byte[] b = new byte[is.available()];is.read(b);data = new String(b);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}

这个data就是我们的json数据了,接下来就是实现解析的操作了。这里我写成了一个方法。具体代码如下:

/** 解析数据*/public void analysisData(String data) {try {// Type listType = new TypeToken<List<Root>>() {// }.getType();oList = new ArrayList<Map<String, Object>>();List<Root> appinfos = new ArrayList<Root>();Root depts = gson.fromJson(data, Root.class);appinfos.add(depts);for (int i = 0; i < appinfos.size(); i++) {root = appinfos.get(i);List<A> listA = new ArrayList<A>();List<B> listB = new ArrayList<B>();listA = root.getA();for (int j = 0; j < listA.size(); j++) {Map<String, Object> map = new HashMap<String, Object>();a = listA.get(j);map.put("name", a.getName());map.put("photo", a.getPhoto());oList.add(map);}listB = root.getB();oList2 = new ArrayList<Map<String, Object>>();for (int j = 0; j < listB.size(); j++) {Map<String, Object> map = new HashMap<String, Object>();b = listB.get(j);map.put("name", b.getName());map.put("photo", b.getPhoto());oList2.add(map);}oList.addAll(oList2);}mListView.setAdapter(new MyAdapter(oList, this));} catch (Exception e) {e.printStackTrace();}}

截止目前,这些数据就解析完成了。当然,可能看起来云里雾里,下面贴上所有的代码:
布局文件:activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:paddingBottom="@dimen/activity_vertical_margin"android:paddingLeft="@dimen/activity_horizontal_margin"android:paddingRight="@dimen/activity_horizontal_margin"android:paddingTop="@dimen/activity_vertical_margin"tools:context=".MainActivity" ><ListView
        android:id="@+id/listview"android:layout_width="match_parent"android:layout_height="wrap_content" ></ListView></RelativeLayout>

item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:padding="5dip" ><LinearLayout
        android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="姓名:"android:textSize="20sp" /><TextView
            android:id="@+id/name"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textSize="18sp" /></LinearLayout><LinearLayout
        android:layout_width="fill_parent"android:layout_height="wrap_content"android:orientation="horizontal" ><TextView
            android:layout_width="wrap_content"android:layout_height="wrap_content"android:text="照片:"android:textSize="20sp" /><TextView
            android:id="@+id/photo"android:layout_width="wrap_content"android:layout_height="wrap_content"android:text=""android:textSize="18sp" /></LinearLayout></LinearLayout>

1.MainActivity.java

public class MainActivity extends Activity {private String data;private Gson gson;private Root root;private A a;private B b;private ListView mListView;private List<Map<String, Object>> oList;private List<Map<String, Object>> oList2;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);mListView = (ListView) findViewById(R.id.listview);gson = new Gson();a = new A();b = new B();root = new Root();try {InputStream is = getResources().getAssets().open("text.txt");byte[] b = new byte[is.available()];is.read(b);data = new String(b);analysisData(data);} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();}}/** 解析数据*/public void analysisData(String data) {try {// Type listType = new TypeToken<List<Root>>() {// }.getType();oList = new ArrayList<Map<String, Object>>();List<Root> appinfos = new ArrayList<Root>();Root depts = gson.fromJson(data, Root.class);appinfos.add(depts);for (int i = 0; i < appinfos.size(); i++) {root = appinfos.get(i);List<A> listA = new ArrayList<A>();List<B> listB = new ArrayList<B>();listA = root.getA();for (int j = 0; j < listA.size(); j++) {Map<String, Object> map = new HashMap<String, Object>();a = listA.get(j);map.put("name", a.getName());map.put("photo", a.getPhoto());oList.add(map);}listB = root.getB();oList2 = new ArrayList<Map<String, Object>>();for (int j = 0; j < listB.size(); j++) {Map<String, Object> map = new HashMap<String, Object>();b = listB.get(j);map.put("name", b.getName());map.put("photo", b.getPhoto());oList2.add(map);}oList.addAll(oList2);}mListView.setAdapter(new MyAdapter(oList, this));} catch (Exception e) {e.printStackTrace();}}
}

实体类的代码如下:
A.java

public class A {private String numid;private String name;private String abbreviation;private String photo;public void setNumid(String numid) {this.numid = numid;}public String getNumid() {return this.numid;}public void setName(String name) {this.name = name;}public String getName() {return this.name;}public void setAbbreviation(String abbreviation) {this.abbreviation = abbreviation;}public String getAbbreviation() {return this.abbreviation;}public void setPhoto(String photo) {this.photo = photo;}public String getPhoto() {return this.photo;}}

B、C、D的跟A一样,就不再赘述了。

还有一个Roor.java:

public class Root {private List<A> a;private List<B> b;private List<C> c;private List<D> d;public void setA(List<A> a) {this.a = a;}public List<A> getA() {return this.a;}public void setB(List<B> b) {this.b = b;}public List<B> getB() {return this.b;}public void setC(List<C> c) {this.c = c;}public List<C> getC() {return this.c;}public void setD(List<D> d) {this.d = d;}public List<D> getD() {return this.d;}}

适配器代码:MAdapter.java

public class MyAdapter extends BaseAdapter {private List<Map<String, Object>> roots;private Context mContext;private LayoutInflater inflater;private Root root;public MyAdapter(List<Map<String, Object>> roots, Context mContext) {this.roots = roots;this.mContext = mContext;inflater = LayoutInflater.from(mContext);}@Overridepublic int getCount() {return roots.size();}@Overridepublic Object getItem(int position) {return roots.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {viewHonder honder = null;if (convertView == null) {convertView = inflater.inflate(R.layout.item, null);honder = new viewHonder();honder.mName = (TextView) convertView.findViewById(R.id.name);honder.mPhoto = (TextView) convertView.findViewById(R.id.photo);convertView.setTag(honder);} else {honder = (viewHonder) convertView.getTag();}Map<String, Object> map = new HashMap<String, Object>();map = roots.get(position);honder.mName.setText(map.get("name") + "");honder.mPhoto.setText(map.get("photo") + "");return convertView;}class viewHonder {TextView mName;TextView mPhoto;}}

好了。这时候已经可以实现这个功能了。

Gson的使用——Gson解析json数组并展示在ListView控件上相关推荐

  1. Json解析后添加到ListView控件上

    主要实现的功能:就是将Jsonj解析后,显示在ListV iew控件上(包括网络取图片,是否显示劵.卡,团) Json {"resultCode":1,"resultIn ...

  2. Json解析后显示在listview控件上

    主要实现的功能:就是将Jsonj解析后,显示在ListV iew控件上(包括网络取图片) Json: {"resultCode":1,"resultInfo": ...

  3. hive处理json数据_(转)hive中解析json数组

    hive中解析一般的json是很容易的,get_json_object就可以了. 但如果字段是json数组,比如 [{"bssid":"6C:59:40:21:05:C4 ...

  4. android 数组指针异常,Android JSON解析Json数组是[]在解析时抛出空指针异常,如何以正确的方式写入?...

    我有复杂的API,我解析并显示在列表视图中,我将努力解析JSONArray.Here我将在斗争之后Json数组这是在帖子json对象"tags_name":["Activ ...

  5. js解析json数组+java对象转json字符串

    function checkoutUserlist(){ // js 解析json数组var statuslist = [{"isAvailabe":"1",& ...

  6. java解析json数组

    java解析json数组 import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; p ...

  7. 使用JS解析JSON数组

    使用js解析json数组 <SCRIPT type= "text/javascript" > 1.如果是字符串则如下: var  jsonStr =  '[{" ...

  8. 学会Hive解析Json数组

    在Hive中会有很多数据是用Json格式来存储的,如开发人员对APP上的页面进行埋点时,会将多个字段存放在一个json数组中,因此数据平台调用数据时,要对埋点数据进行解析.接下来就聊聊Hive中是如何 ...

  9. Hive 超赞的解析 Json 数组的函数

    背景 大数据的 ETL(Extract-Transfer-Load) 过程的 Transfer 阶段,需要对 json 串数据进行转换"拍平"处理. 亲测!超好用 Hive 内置的 ...

  10. html5处理json数据,js解析json数组

    js读取解析JSON类型数据 JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,采用完全独立于语言的文本格式,是理想的数据交换格式.同时,JSON是 Jav ...

最新文章

  1. R语言计算曼哈顿距离(Manhattan Distance)实战:计算两个向量的曼哈顿距离、dist函数计算矩阵中两两元素的曼哈顿距离
  2. 在text html模版中写js,如何利用模板将HTML从JavaScript中抽离
  3. 封装自己的控件库:iPhone静态库的应用
  4. 【计算机网络】网络层 : IP 数据报分片 ( 数据分片机制 | 分片示例 | 三种数据长度单位 )
  5. 99.99%安卓手机存在系统安全漏洞
  6. css html 抽屉,CSS快速入门-前端布局1(抽屉)(示例代码)
  7. 成功创业者所需的能力
  8. 做一个项目,平时都用到哪些工具提高效率(上)【转】
  9. 用计算机探索奥秘规律例题,人教新课标小学五年级上册数学《用计算器探索规律》教案...
  10. 冒泡排序提前终止条件_“离职要提前30天通知”这9种误区,你踩过几个?
  11. 变量命名规则_Java变量与常量
  12. StarkWare推出ZK Rollup扩容解决方案StarkNet
  13. 听说你想进玩TikTok?
  14. java oom分析_JAVA各种OOM代码示例与解决方法
  15. 男人 30 岁前要做的 22 件事
  16. 高一计算机知识点第一章,第一章计算机基础知识知识点总结
  17. [转]KSN报告:2014 - 2016年的PC勒索软件
  18. iOS远程推送--APNs详解
  19. 天梯 L1 Practic1 题解合集
  20. BUUCTF学习笔记-Easy_Clac

热门文章

  1. 蓝天P7xxtm 系列9代最新BIOS
  2. 群友问题,如何面对繁杂的数据需求?
  3. Rust - 常用的三方库集合
  4. 怎样提高睡眠质量容易入睡,五种应对失眠的妙招
  5. 百度LBS开放平台Android SDK产品使用
  6. 英谷Oracle答案,火焰纹章风花雪月各角色能学什么魔法 各角色可习得魔法与熟练度要求一览...
  7. 【观察】百度搜索开放平台
  8. (译)计算距离、方位和更多经纬度之间的点
  9. linux局域网即时通讯,基于身份的Linux下局域网即时通讯系统的研究与实现
  10. 单元测试利器 - Mock