转载请注明出处:http://blog.csdn.net/itachi85/article/details/45172205
json解析我们不陌生了,不过每次编写解析的代码时总是很头疼,一堆很无聊的代码,如果有50个接口那就得写50个相似的解析处理。其实谷歌和阿里很早就推出了解析json的工具包,谷歌的Gson,阿里的FastJson,还有一个jackJson。有人说jackJson解析速度快,大数据时FastJson要比Gson效率高,小数据时反之。不过我还是偏爱谷歌的Gson,即使效率可能偏低,但是稳定性肯定没得说,FastJson和jackJson就不知道了。
现在我们来看看Json是如何解析的:
1.下载Gson开发包,放入工程libs目录下:
http://download.csdn.net/detail/itachi85/8617065
2.编写Bean文件:
先看一下json数据:
{ "array": [ { "username": "在中", "recommend": 0, "user_photo": "0", "like": false, "reply_cnt": 3, "distance": "2154m", "add_date": "3天前", "text": "肯德基快吃吐了,明天去麦当劳看看", "stamp__name": null, "place_id": 1, "ptype": "d", "like_cnt": "2", "posting_image_url": "1", "stamp_name": null, "user": 0, "stamp__id": null, "dislike": "0", "icon": "cate_icon_a_09", "id": 0, "mayor_cnt": 2, "place_name": "东大桥肯德基", "place_level": 2 }, { "username": "在中", "recommend": 0, "user_photo": "0", "like": false, "reply_cnt": 0, "distance": "2425m", "add_date": "3天前", "text": "这是在跳僵尸舞呢吗?", "stamp__name": null, "place_id": 7, "ptype": "d", "like_cnt": "0", "posting_image_url": "0", "stamp_name": null, "user": 0, "stamp__id": null, "dislike": "0", "icon": "cate_icon_b_05", "id": 4, "mayor_cnt": 2, "place_name": "悠唐", "place_level": 1 } ], "error": 0, "next": true }
紧接着,我们创建bean文件
需要注意的是:
1、内部嵌套的类必须是static修饰的;
2、类里面的属性名必须跟Json字段里面的Key是一样的;
NearDynamic.java:
public class NearDynamic { private Boolean next=false; private int error; private ArrayList<Dynamic> array = new ArrayList<Dynamic>(); public Boolean getNext() { return next; } public void setNext(Boolean next) { this.next = next; } public int getError() { return error; } public void setError(int error) { this.error = error; } public ArrayList<DynamicJ> getArray() { return array; } public void setArray(ArrayList<DynamicJ> array) { this.array = array; } }
上面包含了error,next字段,以及包含类型是Dynamic的List,接着我们创建Dynamic:
public class Dynamic { private String username; private int recommend; private String user_photo; private Boolean like; private int replycnt; private String distance; private String add_date; private String text; private String stamp__name; private int place_id; private int like_cnt; private String ptype; private String posting_image_url; private String stamp_name; private int user; private String stamp__id; private int dislike=0; private String icon; private int id; private String place_name; private int place_level; private String mayor_cnt; public String getStamp__name() { return stamp__name; } public void setStamp__name(String stamp__name) { this.stamp__name = stamp__name; } public int getLike_cnt() { return like_cnt; } public void setLike_cnt(int like_cnt) { this.like_cnt = like_cnt; } public String getStamp_name() { return stamp_name; } public void setStamp_name(String stamp_name) { this.stamp_name = stamp_name; } public String getStamp__id() { return stamp__id; } public void setStamp__id(String stamp__id) { this.stamp__id = stamp__id; } public int getDislike() { return dislike; } public void setDislike(int dislike) { this.dislike = dislike; } public String getMayor_cnt() { return mayor_cnt; } public void setMayor_cnt(String mayor_cnt) { this.mayor_cnt = mayor_cnt; } public int getId() { return id; } public void setId(int id) { this.id = id; } public int getUser() { return user; } public void setUser(int user) { this.user = user; } public String getUsername() { return username; } ... }
3.使用Gson解析数据:
private int parseUserData() { String strContent = Utils.getJson("neardynamic.txt"); if (!TextUtils.isEmpty(strContent)) { try { Gson mgson = new Gson(); NearDynamic mNearDynamic = mgson.fromJson( strContent, NearDynamic.class); ArrayList<Dynamic> mNearDynamicList = mNearDynamic .getArray(); LogController.i(mNearDynamicList.get(1).getUsername()); return BaseEngine.RESULT_OK; } catch (Exception e) { e.printStackTrace(); return BaseEngine.PARSEJSON_ERR; } } return BaseEngine.RESULT_ERR; }
上面代码是一个解析的方法:直接从txt文件中读取数据由Json解析,首先由Json生成NearDynamic,然后得到array中的列表数据,我们取第二个数据打下log,得出的结果是"在中",解析完毕。
如果想要快速测试的话,就写一个txt文件,里面写有json数据,放入assets文件中,然后用下面的方法读取txt文件中数据,再按照上面所讲的就可以了:
public static String getJson(String filename) { InputStream mInputStream = null; String resultString = ""; try { mInputStream = App.mContext.getAssets().open(filename); byte[] buffer = new byte[mInputStream.available()]; mInputStream.read(buffer); resultString = new String(buffer, "GB2312"); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { mInputStream.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return resultString.toString(); }
想要了解Gson更多的方法可以下载http://download.csdn.net/detail/itachi85/8617065中的文件,里面有Gson的文档。
原文地址:http://blog.csdn.net/itachi85/article/details/45172205