5分鐘讓你學會用最高效的工具解析所有Json
如果你是一個Android開發工程師,學會解析Json字串是你的必修課,本篇文章主要以例項的方式手把手教你怎麼做,花五分鐘時間閱讀本篇文章你就可以學會解析所有的Json字串啦。
準備:
- json字串
- fastjson
- HiJson格式化json工具
開始教程:
-
fastjson:
常用工作中解析json的工具類有谷歌的GSON,jackson,fastjson,這裡就不做一一比較了,博主告訴大家,fastjson就是最高效最好用的,選它就沒錯了。FastJson出自阿里工程師之手,是一個Json處理工具包,包括“序列化”和“反序列化”兩部分,它具備如下特徵:
-
速度最快,測試表明,fastjson具有極快的效能,超越任其他的Java Json parser。包括自稱最快的JackJson,是GSON解析速度的6倍;
-
功能強大,完全支援Java Bean、集合、Map、日期、Enum,支援範型,支援自省;無依賴,能夠直接執行在Java SE 5.0以上版本;支援Android;開源 (Apache 2.0)
下載地址:
[fastjson jar包下載地址](http://download.csdn.net/detail/pdsyzbaozi/8199419)
-
-
HiJson:
HiJson是一個將 json 字串格式化的工具,非常好用,讓你的json字串結構一目瞭然,並且可以直接複製鍵值,強烈推薦!
HiJson格式化json下載地址:
Fastjson API入口類是com.alibaba.fastjson.JSON,常用的序列化操作都可以在JSON類上的靜態方法直接完成。
public static final Object parse(String text); // 把JSON文字parse為JSONObject或者JSONArray
public static final JSONObject parseObject(String text); // 把JSON文字parse成JSONObject
public static final T parseObject(String text, Class clazz); // 把JSON文字parse為JavaBean
public static final JSONArray parseArray(String text) ; // 把JSON文字parse成JSONArray
public static final List parseArray(String text, Class clazz); //把JSON文字parse成JavaBean集合
public static final String toJSONString(Object object); // 將JavaBean序列化為JSON文字
public static final String toJSONString(Object object, boolean prettyFormat); // 將JavaBean序列化為帶格式的JSON文字
public static final Object toJSON(Object javaObject); 將JavaBean轉換為JSONObject或者JSONArray。
如果你從沒解析過json,看不太明白沒關係,現在我上面那個json字串,手把手的教你怎麼解析,學會解析這個較複雜的json串,相信其他的你也肯定也會解析了。
json串提供給大家拿去練手
{
"status": "2000",
"msg": "Successful!",
"data": [{
"details": [{
"distance": 2847,
"nextLat": 39.994076,
"nextLong": 116.47764,
"nexti": "MeloDev",
"status": 4
}],
"distance": 2847,
"imageUrl": "",
"overview": "長期原創Android部落格",
"source": "http://www.jianshu.com/users/f5909165c1e8/latest_articles",
"status": "SUCCESSFUL"
}, {
"details": [{
"distance": 2769,
"nextLat": 39.97691,
"nextLong": 116.46019,
"nexti": "MeloDev",
"status": 4
}],
"distance": 2769,
"imageUrl": "",
"overview": "喜歡請加關注",
"source": "http://www.jianshu.com/users/f5909165c1e8/latest_articles",
"status": "SUCCESSFUL"
}]
}
好的萬事俱備,馬上就開始!
把下載的fastjson的兩個jar包匯入libs目錄下:
匯入fastjson的jar包
現在開始比較關鍵的一步,新建一個bean物件,去作為json解析之後的載體,程式碼如下:
public class QueryResultInfo {
public String status;
public String msg;
public List<DataList> data;
public class DataList {
public int distance;
public String imageUrl;
public String overview;
public String source;
public String status;
public List<DetailsList> details;
@Override
public String toString() {
return "DataList [distance=" + distance + ", imageUrl=" + imageUrl + ", overview=" + overview + ", source=" + source + ", status=" + status + ", details=" + details.toString() + "]";
}
public class DetailsList {
public int distance;
public double nextLat;
public double nextLong;
public String nexti;
public int status;
@Override
public String toString() {
return "DetailsList [distance=" + distance + ", nextLat=" + nextLat + ", nextLong=" + nextLong + ", nexti=" + nexti + ", status=" + status + "]";
}
}
}
@Override
public String toString() {
return "QueryResultInfo [status=" + status + ", msg=" + msg + ", data=" + data.toString() + "]";
}
}
我來告訴大家,寫一個解析json之後bean物件的技巧。首先觀察json格式化的結果(HiJson工具右側檢視),java程式碼中:
-
資料的型別、鍵的名稱都必須與json字串保證一一對應
也就是例子中,每個變數都是以json的鍵名稱命名的,不能寫錯,而且資料型別也必須對應,String就是String,int就是int,float就是float -
如果出現巢狀的陣列,就寫一個內部類,用同樣的方式命名各個json欄位,用List接收它,注意List的命名也得是用json中的鍵名。多層巢狀以此類推。
-
所有變數的訪問域都是public的。
好了bean物件就完成了。
我把json字串存在了String.xml下,點選按鈕之後,解析json字串,layout檔案很簡單,這裡就不放出了。
MainActivity
可以看到,我們呼叫JSON.parseObject(myJson,AppInfo.class)這一行程式碼,我們就把json字串的所有資訊都解析到了appInfo物件中,想用什麼就直接取出來就可以了。
這個json字串相對還是複雜的,多層巢狀,所以這個你都會了,簡單的你也肯定沒問題了,當然fastjson的強大不止於此,如果有特殊需要,再慢慢發掘吧~!
文/MeloDev(簡書作者)
原文連結:http://www.jianshu.com/p/4cab1e59befb
著作權歸作者所有,轉載請聯絡作者獲得授權,並標註“簡書作者”。