json之FastJson解析
fastjson的使用
一、JSON(JavaScript OjectNotation)是一種輕量級的資料交換方式。易於人的閱讀和編寫。也正是由於Json格式資料的簡單和易用性,越來越多的開發者開始使用Json,以此同時,很多公司也封裝了一套自己的Json框架,用來實現Json格式資料的轉換,比如Google的Gson,阿里巴巴的FastJson,IBM的Json4J等。這裡只介紹阿里巴巴的FastJson的使用。
二、阿里巴巴的FastJson包是一個處理Json的工具包,包括了“序列化”和“反序列化”,號稱是目前速度最快,效能最佳,功能強大的工具,完全支援Java Bean,集合,Map,日期,Enum,泛型,自省,無依賴,能夠執行在JavaSE5.0以上的版本。
三、Fastjson Api的匯入包是com.alibaba.fastjson.JSON,常用的序列化靜態方法有如下:
/** 把JSON文字parse為JSONObject或者JSONArray */
public static final Object parse(String text);
/** 把JSON文字parse成JSONObject */
public static final JSONObject parseObject(String text);
/** 把JSON文字parse為JavaBean */
public static final T parseObject(String text, Class clazz);
/** 把JSON文字parse成JSONArray */
public static final JSONArray parseArray(String text);
/** 把JSON文字parse成JavaBean集合 */
public static final List parseArray(String text, Class clazz);
/** 將JavaBean序列化為JSON文字 */
public static final String toJSONString(Object object);
/** 將JavaBean序列化為帶格式的JSON文字 */
public static final String toJSONString(Object object, boolean prettyFormat);
/** 將JavaBean轉換為JSONObject或者JSONArray */
public static final Object toJSON(Object javaObject);
四、FastJson使用例子
1、解析json字串
有Json格式字串如下:
{\”title\”: \”普京視察柔道隊 被一倔姑娘撂倒兩次\”,\”ptime\”: \”2016-01-11 07:11:55\”,\”sourse\”: \”光明網\”,\”editor\”: \”老米\”,\”digest\”: \”年逾六旬的普京身穿柔道服,腰繫黑帶,面帶笑容。\”}
現在依據Json的key值寫一個javaBean物件:
public class ANews {
private String title;
private String ptime;
private String source;
private String editor;
private String digest;
}
為了文章簡潔,省略了ANews物件的getters和setters方法。接著可以使用
ANews anewsBean = JSON.parseObject(anewsJs, ANews.class);
將Json字串序列化為ANews物件。詳細原始碼如下:
String anewsJs = "{\"title\": \"普京視察柔道隊 被一倔姑娘撂倒兩次\","
+ "\"ptime\": \"2016-01-11 07:11:55\","
+ "\"source\": \"光明網\",\"editor\": \"老米\","
+ "\"digest\": \"年逾六旬的普京身穿柔道服,腰繫黑帶,面帶笑容。\"}";
ANews anewsBean = JSON.parseObject(anewsJs, ANews.class);
StringBuilder sbBean = new StringBuilder();
sbBean.append("JSON.parseObject(String,Class) ===>")
.append("\ntitle=" + anewsBean.getTitle())
.append("\nptime=" + anewsBean.getPtime())
.append("\nsource=" + anewsBean.getSource())
.append("\neditor=" + anewsBean.getEditor())
.append("\ndigest=" + anewsBean.getDigest()).append("\n");
System.out.println(sbBean.toString());
System.out.println("JSON.toJSONString(object) ===>\n"
+ JSON.toJSONString(anewsBean) + "\n");
JSONObject anewsJObject = JSON.parseObject(anewsJs);
StringBuilder sb = new StringBuilder();
sb.append("JSON.parseObject(String) ===>")
.append("\ntitle=" + anewsJObject.getString("title"))
.append("\nptime=" + anewsJObject.getString("ptime"))
.append("\nsource=" + anewsJObject.getString("source"))
.append("\neditor=" + anewsJObject.getString("editor"))
.append("\ndigest=" + anewsJObject.getString("digest"))
.append("\n");
System.out.println(sb.toString());
輸出結果如下
使用FastJson很簡單,輕輕鬆鬆的就可以拿到Json包含的資訊,不需要用JsonObject對每一個key值做存在性判定,再取出對應的值。
使用FastJson編寫bean物件時要注意,bean物件的成員變數對應著Json字串的key值,FastJson的容錯性也是做得不錯的,bean物件的成員變數在Json String裡沒有時,會得到該型別對應的預設值。例如,由於筆誤將上述的bean裡的source引數寫成了sourse,由於解析的json string裡只有source,沒有sourse,使用parseObject(String text, Class clazz)解析也是完全沒有問題的,得到的bean物件的sourse的值是null。
2、解析Json String陣列
同樣使用parseObject(String text, Class class)解析json string陣列,使用的方法以讓是新增一個bean類,json string陣列中的key要與bean中的成員變數對應,例如有json string陣列如下:
{"news":[{\"title\": \"清華女博士回老家開鄉村咖啡館:圓了“少女夢”\",\"ptime\": \"2016-01-11 07:39\",\"sourse\": \"成都商報\",\"editor\": \"王明平\",\"digest\": \"綿竹市孝德鎮年畫村裡,一家鄉村咖啡館熱熱鬧鬧開張了.\"},{\"title\": \"普京視察柔道隊 被一倔姑娘撂倒兩次\",\"ptime\": \"2016-01-11 07:11:55\",\"sourse\": \"光明網\",\"editor\": \"老米\",\"digest\": \"年逾六旬的普京身穿柔道服,腰繫黑帶,面帶笑容。\"}]}
需要新新增一個News類
public class News {
private List<ANews> news;
public List<ANews> getNews() {
return news;
}
public void setNews(List<ANews> news) {
this.news = news;
}
}
呼叫解析方法如下:
News newsList = JSON.parseObject(anewsJs, News.class);
System.out.println("JSON.parseObject(String,Class) ===>");
for (ANews aNews : newsList.getNews()) {
StringBuilder sbBean = new StringBuilder();
sbBean.append("title=" + aNews.getTitle())
.append("\nptime=" + aNews.getPtime())
.append("\nsource=" + aNews.getSource())
.append("\neditor=" + aNews.getEditor())
.append("\ndigest=" + aNews.getDigest()).append("\n\n");
System.out.println(sbBean.toString());
}
輸出結果如下:
哈哈,使用FastJson後,解析Json立馬變得非常的簡單,快捷。我這裡使用的FastJson版本是fastjson-1.1.36.jar,
下載連結是:http://download.csdn.net/detail/peak1chen/9398942