1. 程式人生 > >json之FastJson解析

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