原創(chuàng)博客,轉載請經(jīng)過本人允許肥矢,你們的點贊和關注是我長期寫作的動力~
準備:
- 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)
下載地址:
-
HiJson:
HiJson是一個將 json 字符串格式化的工具,非常好用油讯,讓你的json字符串結構一目了然详民,并且可以直接復制鍵值,強烈推薦陌兑!
下載地址:
Fastjson API入口類是com.alibaba.fastjson.JSON沈跨,常用的序列化操作都可以在JSON類上的靜態(tài)方法直接完成。
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狞玛,看不太明白沒關系,現(xiàn)在我上面那個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": "長期原創(chuàng)Android博客",
"source": "http://www.reibang.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.reibang.com/users/f5909165c1e8/latest_articles",
"status": "SUCCESSFUL"
}]
}
好的萬事俱備硬鞍,馬上就開始!
把下載的fastjson的兩個jar包導入libs目錄下:
現(xiàn)在開始比較關鍵的一步戴已,新建一個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代碼中:
數(shù)據(jù)的類型握联、鍵的名稱都必須與json字符串保證一一對應
也就是例子中著淆,每個變量都是以json的鍵名稱命名的,不能寫錯拴疤,而且數(shù)據(jù)類型也必須對應永部,String就是String,int就是int呐矾,float就是float如果出現(xiàn)嵌套的數(shù)組苔埋,就寫一個內(nèi)部類,用同樣的方式命名各個json字段蜒犯,用List接收它组橄,注意List的命名也得是用json中的鍵名。多層嵌套以此類推罚随。
所有變量的訪問域都是public的玉工。
好了bean對象就完成了。
我把json字符串存在了String.xml下淘菩,點擊按鈕之后遵班,解析json字符串,layout文件很簡單潮改,這里就不放出了狭郑。
可以看到,我們調用JSON.parseObject(myJson,AppInfo.class)這一行代碼汇在,我們就把json字符串的所有信息都解析到了appInfo對象中翰萨,想用什么就直接取出來就可以了。
這個json字符串相對還是復雜的糕殉,多層嵌套亩鬼,所以這個你都會了殖告,簡單的你也肯定沒問題了,當然fastjson的強大不止于此雳锋,如果有特殊需要黄绩,再慢慢發(fā)掘吧~!
喜歡請關注哦魄缚,未來要寫一篇有關線程消息機制Handler的字典型博客宝与,正在深入研究中!