json解析咱們不陌生了,不過每次編寫解析的代碼時老是很頭疼,一堆很無聊的代碼,若是有50個接口那就得寫50個類似的解析處理。其實谷歌和阿里很早就推出瞭解析json的工具包,谷歌的Gson,阿里的FastJson,還有一個jackJson。有人說jackJson解析速度快,大數據時FastJson要比Gson效率高,小數據時反之。不過我仍是偏心谷歌的Gson,即便效率可能偏低,可是穩定性確定沒得說,FastJson和jackJson就不知道了。java
如今咱們來看看Json是如何解析的:
web
1.下載Gson開發包,放入工程libs目錄下:json
http://download.csdn.net/detail/itachi85/8617065工具
2.編寫Bean文件:post
先看一下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文件大數據
須要注意的是:this
1:內部嵌套的類必須是static修飾的;url
2:類裏面的屬性名必須跟Json字段裏面的key是同樣的。spa
NearDynamic.java:
1 public class NearDynamic { 2 private Boolean next=false; 3 private int error; 4 private ArrayList<Dynamic> array = new ArrayList<Dynamic>(); 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<DynamicJ> getArray() { 18 return array; 19 } 20 public void setArray(ArrayList<DynamicJ> 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 ArrayList<Dynamic> mNearDynamicList = 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 block 11 e.printStackTrace(); 12 } finally { 13 try { 14 mInputStream.close(); 15 } catch (IOException e) { 16 // TODO Auto-generated catch block 17 e.printStackTrace(); 18 } 19 } 20 return resultString.toString(); 21 }
想要了解Gson更多的方法能夠下載http://download.csdn.net/detail/itachi85/8617065中的文件,裏面有Gson的文檔。