json解析我们不陌生了,不过每次编写解析的代码时总是很头疼,一堆很无聊的代码,如果有50个接口那就得写50个相似的解析处理。其实谷歌和阿里很早就推出了解析json的工具包,谷歌的Gson,阿里的FastJson,还有一个jackJson。有人说jackJson解析速度快,大数据时FastJson要比Gson效率高,小数据时反之。不过我还是偏爱谷歌的Gson,即使效率可能偏低,但是稳定性肯定没得说,FastJson和jackJson就不知道了。
现在我们来看看Json是如何解析的:
1.下载Gson开发包,放入工程libs目录下:
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:
1 public class NearDynamic { 2 private Boolean next=false; 3 private int error; 4 private ArrayListarray = new ArrayList(); 5 public Boolean getNext() { 6 return next; 7 } 8 public void setNext(Boolean next) { 9 this.next = next;10 }11 public int getError() {12 return error;13 }14 public void setError(int error) {15 this.error = error;16 }17 public ArrayList getArray() {18 return array;19 }20 public void setArray(ArrayList array) {21 this.array = array;22 }23 }
上面包含了error,next字段,以及包含类型是Dynamic的List,接着我们创建Dynamic:
1 public class Dynamic { 2 private String username; 3 private int recommend; 4 private String user_photo; 5 private Boolean like; 6 private int replycnt; 7 private String distance; 8 private String add_date; 9 private String text;10 private String stamp__name;11 private int place_id;12 private int like_cnt;
13 private String ptype;
14 private String posting_image_url;15 private String stamp_name;16 private int user;17 private String stamp__id;18 private int dislike=0;19 private String icon;20 private int id;21 private String place_name;22 private int place_level;23 private String mayor_cnt;24 public String getStamp__name() {25 return stamp__name;26 }27 public void setStamp__name(String stamp__name) {28 this.stamp__name = stamp__name;29 }30 public int getLike_cnt() {31 return like_cnt;32 }33 public void setLike_cnt(int like_cnt) {34 this.like_cnt = like_cnt;35 }36 public String getStamp_name() {37 return stamp_name;38 }39 public void setStamp_name(String stamp_name) {40 this.stamp_name = stamp_name;41 }42 public String getStamp__id() {43 return stamp__id;44 }45 public void setStamp__id(String stamp__id) {46 this.stamp__id = stamp__id;47 }48 public int getDislike() {49 return dislike;50 }51 public void setDislike(int dislike) {52 this.dislike = dislike;53 }54 public String getMayor_cnt() {55 return mayor_cnt;56 }57 public void setMayor_cnt(String mayor_cnt) {58 this.mayor_cnt = mayor_cnt;59 }60 public int getId() {61 return id;62 }63 public void setId(int id) {64 this.id = id;65 }66 public int getUser() {67 return user;68 }69 public void setUser(int user) {70 this.user = user;71 }72 public String getUsername() {73 return username;74 }75 ...
76 }
3.使用Gson解析数据:
1 private int parseUserData() { 2 String strContent = Utils.getJson("neardynamic.txt"); 3 if (!TextUtils.isEmpty(strContent)) { 4 try { 5 Gson mgson = new Gson(); 6 NearDynamic mNearDynamic = mgson.fromJson( 7 strContent, NearDynamic.class); 8 ArrayListmNearDynamicList = mNearDynamic 9 .getArray();10 LogController.i(mNearDynamicList.get(1).getUsername());11 return BaseEngine.RESULT_OK;12 } catch (Exception e) {13 e.printStackTrace();14 return BaseEngine.PARSEJSON_ERR;15 }16 }17 return BaseEngine.RESULT_ERR;18 }
上面代码是一个解析的方法:直接从txt文件中读取数据由Json解析,首先由Json生成NearDynamic,然后得到array中的列表数据,我们取第二个数据打下log,得出的结果是"在中",解析完毕。
如果想要快速测试的话,就写一个txt文件,里面写有json数据,放入assets文件中,然后用下面的方法读取txt文件中数据,再按照上面所讲的就可以了:
1 public static String getJson(String filename) { 2 InputStream mInputStream = null; 3 String resultString = ""; 4 try { 5 mInputStream = App.mContext.getAssets().open(filename); 6 byte[] buffer = new byte[mInputStream.available()]; 7 mInputStream.read(buffer); 8 resultString = new String(buffer, "GB2312"); 9 } catch (IOException e) {10 // TODO Auto-generated catch block11 e.printStackTrace();12 } finally {13 try {14 mInputStream.close();15 } catch (IOException e) {16 // TODO Auto-generated catch block17 e.printStackTrace();18 }19 }20 return resultString.toString();21 }
想要了解Gson更多的方法可以下载http://download.csdn.net/detail/itachi85/8617065中的文件,里面有Gson的文档。