Fastjson的基本使用

Fastjson使用

Fastjson介紹

官方主頁:http://code.alibabatech.com/wiki/display/FastJSON/Home-zh
Fastjson是一個Java語言編寫的JSON處理器。
1、遵循http://json.org標準,爲其官方網站收錄的參考實現之一。
2、支持JDK的各種類型,包括基本的JavaBean、Collection、Map、Date、Enum、泛型。
3、無依賴,不需要例外額外的jar,能夠直接跑在JDK上。

source 下載

使用

pom.xml文件中加入依賴依賴:

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
     <version>1.1.41</version>
</dependency>

基本序列化

序列化就是把JavaBean對象轉化成JSON格式的文本。

Object o = ...;

String text = JSON.toJSONString(o);

在這個例子中,調用JSON.toJSONString方法,把對象o轉化爲JSON格式的文本。

使用@JSONField Annotation

在某些場景,你可能需要定製序列化輸出,比如說,希望序列化採用之後採用“USERID”,而不是“id”,使用@JSONField這個Annotation。

public class User {

    @JSONField(name="USERID")
    public int getId() { ... }
}
 
User user = ...;

JSON.toJSONString(user); // {"USERID":234}

序列化時過濾某些字段

方式一:使用@JSONField(serialize = false)

public class User {

    @JSONField(serialize = false)
    public int getId() { ... }
}
 
User user = ...;

方式二:在序列化時添加filter指定要序列化的字段,更面例子,指定序列化NewsEntity的id,pubTime,content,commentList這四個屬性。

   NewsEntity newsEntity = ......
   SimplePropertyPreFilter filter = new SimplePropertyPreFilter(NewsEntity.class, "id","pubTime","content","commentList");
   return  JSON.toJSONString(new DetailModel("00", newsEntity), filter);

序列化時日期格式化

使用@JSONField (format=“yyyy-MM-dd HH:mm:ss”)指定日期屬性格式

public class User {

    private Timestamp pubTime; 

    @JSONField (format="yyyy-MM-dd HH:mm:ss")
    public Timestamp getPubTime() {
        return pubTime;
    }

    public void setPubTime(Timestamp pubTime) {
        this.pubTime = pubTime;
    }
}
 
User user = ...;

反序列化

反序列化就是把JSON格式的文本轉化爲Java Bean對象。
指定Class信息反序列化
通過指定類型信息,可以很方便的將“JSON文本”反序列化爲“Java Bean”對象,例如:

String text = ...; // {"r":255,"g":0,"b":0,"alpha":255}

Color color = JSON.parseObject(text, Color.class);

類型集合的反序列化

這個接口類似於parseObject

String text = ...; // [{ ... }, { ... }]

List<User> users = JSON.parseArray(text, User.class);

泛型的反序列化

如果你需要返回一個帶泛型的對象,例如List<User>、Map<String, User>,你可以使用TypeReference來傳入類型信息。

String text = ...; // {"name":{"name":"ljw",age:18}}

Map<String, User> userMap = JSON.parseObject(text, new TypeReference<Map<String, User>>() {});

組合類型集合的反序列化

比如在網絡協議中,經常會存在這樣的組合: [{/*header*/}, {/*body*/}]

fastjson對這種結構的反序列化有專門支持。

String text = ...; // [{/* header */}, {/* body */}]

Type[] types = new Type[] {Header.class, Body.class};

List<Object> list = JSON.parseArray(text, types);

Header header = (Header) list.get(0);

Body body = (Body) list.get(1);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章