fastjson基本使用 (待繼續完善)【原】

參考: http://blog.csdn.net/wx_962464/article/details/37612861html

maven庫下載  java

 

fastjson基本樣例1

Cat.java

package test;

class Cat {
    private String color;

    public String getColor() {
        return color;
    }

    public void setColor(String color) {
        this.color = color;
    }

    @Override
    public String toString() {
        return "Cat [color=" + color + "]";
    }

};

 

Master.java

package test;

import java.util.ArrayList;
import java.util.List;

//主人
class Master {
    private String name;
    private List<Cat> cats = new ArrayList<Cat>();

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public List<Cat> getCats() {
        return cats;
    }

    public void setCats(List<Cat> cats) {
        this.cats = cats;
    }

    @Override
    public String toString() {
        return "Master [name=" + name + ", cats=" + cats + "]";
    }

}

 

FastjsonDemo.java

package test;

import java.util.List;

import com.alibaba.fastjson.JSON;

class FastjsonDemo {
    public static void main(String[] args) {
        Cat cat1 = new Cat();
        cat1.setColor("white");

        Cat cat2 = new Cat();
        cat2.setColor("black");

        Master master = new Master();
        master.setName("bobo");
        master.getCats().add(cat1);
        master.getCats().add(cat2);

        // 主人對象轉json串
        String masterJson = JSON.toJSONString(master);
        System.out.println("master json : " + masterJson);
        // json串轉主人對象
        Master masterObj = JSON.parseObject(masterJson, Master.class);
        System.out.println("master object:" + masterObj);

        // 構建用戶對象數組
        Cat[] cats = new Cat[2];
        cats[0] = cat1;
        cats[1] = cat2;
        // 數組轉JSON串
        String jsonString2 = JSON.toJSONString(cats);
        System.out.println("array String:" + jsonString2);
        // JSON串轉
        List<Cat> users2 = JSON.parseArray(jsonString2, Cat.class);
        System.out.println("array obj:" + users2);

    }
}

 

輸出語句:

master json : {"cats":[{"color":"white"},{"color":"black"}],"name":"bobo"}
master object:Master [name=bobo, cats=[Cat [color=white], Cat [color=black]]]
array String:[{"color":"white"},{"color":"black"}]
array obj:[Cat [color=white], Cat [color=black]]

 

fastjson使用過程當中特別聲明

當你用如下語句獲得jsonStr輸出爲空,即{}時. 要特別留意你的對象是否符合javaBean規範:json

javaBean約定get,set方法的第4個字母必定要大寫,不過google 的gson卻是不用(其實這反而不規範)數組

String jsonStr = JSON.toJSONString(master);

 

當初因爲公司習慣字符串以c開頭,時間以t開頭,數值以n開頭來定義屬性,如cName,tCrtTm,nAge,致使個人eclipse自動生成的get,set方法變成以下(getcName不規範),找了半小時才發現這個問題.eclipse

 

錯誤屬性cName:

package test;

//主人
class Master {
    private String cName;

    public String getcName() {
        return cName;
    }

    public void setcName(String cName) {
        this.cName = cName;
    }

}

 

正確屬性name:

package test;

//主人
class Master {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

 

 

fastjson基本樣例2

 

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;

public class test {
    public static void main(String[] args) {
        Map packet = new HashMap();
        Map requestHead = new HashMap();
        Map requestBody = new HashMap();
        Map base = new HashMap();
        List coverageList = new ArrayList();
        Map coverage1 = new HashMap();
        Map coverage2 = new HashMap();
        
        packet.put("requestHead",requestHead );
        packet.put("requestBody",requestBody );
        
        requestHead.put("userId", "userid1234");
        requestHead.put("password", "password1234");
        requestHead.put("serviceNo", "serviceNo1234");
        
        requestBody.put("base", base);
        
        base.put("basekey1", "value1");
        base.put("basekey2", "value2");
        base.put("basekey3", "value3");
        
        requestBody.put("coverage_list", coverageList);
        
        coverageList.add(coverage1);
        coverageList.add(coverage2);

        coverage1.put("coverageCode1", "value1");
        coverage1.put("coverageName1", "value1");
        coverage2.put("coverageCode2", "value2");
        coverage2.put("coverageName2", "value2");
        
        String jsonStr = JSON.toJSONString(packet,true);
        
        System.out.println("把map轉換成json String後打印以下:");
        System.out.println(jsonStr);
        
        JSONObject jsonObj = JSON.parseObject(jsonStr);
        
        JSONObject requestHeadObj = jsonObj.getJSONObject("requestBody").getJSONObject("base");
        Set<Entry<String, Object>>  set = requestHeadObj.entrySet();
        System.out.println("jsonObj中requestBody>base節點下的各值以下:");
        for(Entry<String,Object> entry :set){
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
        
    }
}

 

fastjson格式化輸出

JSON.toJSONString(
retObject,
SerializerFeature.PrettyFormat,
SerializerFeature.WriteMapNullValue, 
SerializerFeature.WriteDateUseDateFormat);

 

經常使用FastJSON的SerializerFeature特性及日期轉換格式==>https://www.cnblogs.com/xd03122049/p/6079695.htmlmaven

  • SerializerFeature.PrettyFormat:格式化輸出
  • SerializerFeature.WriteMapNullValue:是否輸出值爲null的字段,默認爲false
  • SerializerFeature.DisableCircularReferenceDetect:消除循環引用
  • SerializerFeature.WriteNullStringAsEmpty:將爲null的字段值顯示爲""
  • WriteNullListAsEmpty:List字段若是爲null,輸出爲[],而非null
  • WriteNullNumberAsZero:數值字段若是爲null,輸出爲0,而非null
  • WriteNullBooleanAsFalse:Boolean字段若是爲null,輸出爲false,而非null
  • SkipTransientField:若是是true,類中的Get方法對應的Field是transient,序列化時將會被忽略。默認爲true
  • SortField:按字段名稱排序後輸出。默認爲false
  • WriteDateUseDateFormat:全局修改日期格式,默認爲false。JSON.DEFFAULT_DATE_FORMAT = 「yyyy-MM-dd」;JSON.toJSONString(obj, SerializerFeature.WriteDateUseDateFormat);
  • BeanToArray:將對象轉爲array輸出
  • QuoteFieldNames:輸出key時是否使用雙引號,默認爲true
  • UseSingleQuotes:輸出key時使用單引號而不是雙引號,默認爲false(經測試,這裏的key是指全部的輸出結果,而非key/value的key,而是key,和value都使用單引號或雙引號輸出)

 

 

fastjson設置指定日期屬性的格式化==>https://blog.csdn.net/john1337/article/details/76277617ide

若是要被序列化的對象含有一個date屬性或者多個date屬性按照相同的格式序列化日期的話,那咱們可使用下面的語句實現:測試

1.JSONObject.DEFFAULT_DATE_FORMAT="yyyy-MM-dd";//設置日期格式
2.JSONObject.toJSONString(resultMap, SerializerFeature.WriteMapNullValue,SerializerFeature.DisableCircularReferenceDetect,
SerializerFeature.WriteDateUseDateFormat);

可是上面的解決方案面臨一個問題,若是不知足上面的條件(多個date屬性,並且須要按照不定的格式序列化這些日期屬性),那麼咱們就須要另闢蹊徑,使用fastjson的特性來完成:this

@JSONField(format="yyyyMMdd")
    private Date date;
@JSONField(format="yyyy-MM-dd HH:mm:ss")
    private Date date1;

 

個人其它相關文章

fastjson基本使用 (待繼續完善)【原】google

fastjson json和map及對象轉換【轉】【補】

Gson入門教程【原】

相關文章
相關標籤/搜索