SSM集成FastJson

FastJson

Json數據格式回顧

什麼是json

JSON:(JavaScript Object Notation, JS 對象簡譜) 是一種輕量級的數據交換格式。它基於 ECMAScript(歐洲計算機協會制定的js規範)的一個子集,採用徹底獨立於編程語言的文本格式來存儲和表示數據。簡潔和清晰的層次結構使得 JSON 成爲理想的數據交換語言。 易於人閱讀和編寫,同時也易於機器解析和生成,並有效地提高網絡傳輸效率。目前,Json處於數據交換語言的王者地位。javascript

Json數組格式

Json的數據自己是數組,中括號包裹。數組的元素之間用「,」分開,數組元素的數據類型沒有限制。java

//定義數組格式json
var jsonArray = ["a1","a2",...];  
//打印json數組的a1元素
console.log(jsonArray[0]);

Json對象格式

Json的數據自己是對象,大括號去包裹。對象採用鍵值對形式存儲,鍵固定爲字符串類型,值是任意類型的數據,鍵和值使用「:」分開。spring

//定義對象格式json
var jsonObject = {"k1":"v1","k2":"v2"}
//打印json對象鍵k1的值
console.log(jsonObject.k1);

數組對象相互嵌套格式

  1. 數組中的元素是對象編程

    var jsonArray = [
        {"k1":"v1"},{"k2":"v2"}
    ]; // 定義數組格式json,數組元素是對象
    console.log(jsonArray[0].k1); //訪問數組0索引的元素,該元素的鍵k1對應的值
  2. 對象中的值是數組json

    var jsonObject = {
        "k1":["a1","a2"],
        "k2":["b1","b2"]
    }; // 定義對象格式json,鍵是字符串類型,值是數組
    console.log(jsonObject.k1[0]); //訪問對象的鍵是k1,對於的值爲數組,數組的0索引元素
  3. 互相嵌套api

    var json = {
        "k1":[
          "a1",{"key1":"value1"},{"key2":"value2"}  
        ],
        "k2":[
            {"key1":"value1"}
        ]
    }; //定義對象格式json,鍵是字符串,值是數組,數組的元素是對象
    console.log(json.k1[1].key1); //訪問json對象的鍵k1,對應的是數組,訪問數組的1索引,數組的1索引上的元素是對象,訪問key1鍵對應的值

FastJson介紹

FastJson 是阿里巴巴的開源JSON解析庫,它能夠解析 JSON 格式的字符串,支持將 Java Bean 序列化爲 JSON 字符串,也能夠從 JSON 字符串反序列化到 JavaBean。數組

Fastjson 的優勢spring-mvc

  • 速度快
    fastjson相對其餘JSON庫的特色是快,從2011年fastjson發佈1.1.x版本以後,其性能從未被其餘Java實現的JSON庫超越。
  • 使用普遍
    fastjson在阿里巴巴大規模使用,在數萬臺服務器上部署,fastjson在業界被普遍接受。在2012年被開源中國評選爲最受歡迎的國產開源軟件之一。
  • 測試完備
    fastjson有很是多的testcase,在1.2.11版本中,testcase超過3321個。每次發佈都會進行迴歸測試,保證質量穩定。
  • 使用簡單
    fastjson的 API 十分簡潔。
  • 功能完備
    支持泛型,支持流處理超大文本,支持枚舉,支持序列化和反序列化擴展。

FastJson序列化API

序列化:是指將Java對象轉成json格式字符串的過程。Java Bean對象、List集合對象、Map集合,爲應用最普遍的。服務器

  • JSON.toJSONString網絡

    • 序列化Java對象
    public void objectToJSon(){
        Student student = new Student("張三",22,getDate());
        String str = JSON.toJSONString(student);
        System.out.println(str);
    }
    • 序列化List集合
    public void listToJson(){
        Student student1 = new Student("張三",22,getDate());
        Student student2 = new Student("李四",20,getDate());
    
        List<Student> list = new ArrayList<Student>();
        list.add(student1);
        list.add(student2);
        String jsonString = JSON.toJSONString(list);
        System.out.println(jsonString);
    }
    • 序列化Map集合
    public void mapToJson(){
        Student student1 = new Student("張三",22,getDate());
        Student student2 = new Student("李四",20,getDate());
        
        Map<String,Student> map = new HashMap<String, Student>();
        map.put("s1",student1);
        map.put("s2",student2);
        String jsonString = JSON.toJSONString(map);
        System.out.println(jsonString);
    }

FashJson反序列化API

  • JSON.parseObject

    • 反序列化Java對象
    public void jsonToObject(){
        String jsonString = "{\"age\":20,\"name\":\"張三\",\"birthday\":1617673647826}";
        Student student = JSON.parseObject(jsonString, Student.class);
        System.out.println(student);
    }
  • JSON.parseArray

    • 反序列化List集合
    public void jsonToList(){
         String jsonString = "[{\"age\":22,\"birthday\":1617673647826,\"name\":\"張三\"},{\"age\":20,\"birthday\":1617673647826,\"name\":\"李四\"}]";
         List<Student> list = JSON.parseArray(jsonString,Student.class);
         for (int i = 0; i < list.size(); i++) {
             Student student =  list.get(i);
             System.out.println(student);
         }
    }
  • JSON.parseObject

    • 反序列化Map集合
    public void jsonToMap(){
        String jsonString = "{\"s1\":{\"age\":22,\"birthday\":1617673921907,\"name\":\"張三\"},\"s2\":{\"age\":20,\"birthday\":1617673921907,\"name\":\"李四\"} }";
        Map<String,Student> parse = JSON.parseObject(jsonString,new TypeReference<Map<String,Student>>(){});
    
        for(String s : parse.keySet()){
            System.out.println(s + ":::"+parse.get(s));
        }
    }

SerializerFeature枚舉

該枚舉支持序列化的一些特性數據定義。

  • 枚舉常量 WriteMapNullValue 序列化爲null的字段

    public void testSerializerFeature(){
        Student student = new Student();
        student.setAge(20);
        //student.setName("chen");
        student.setBirthday(getDate());
        
        String jsonString = JSON.toJSONString(student, SerializerFeature.WriteMapNullValue);
        System.out.println(jsonString);
    }
  • 枚舉常量 WriteNullStringAsEmpty 字段爲null,序列化爲""

    public void testSerializerFeature(){
        Student student = new Student();
        student.setAge(20);
        //student.setName("chen");
        student.setBirthday(getDate());
        
        String jsonString = JSON.toJSONString(student, SerializerFeature.WriteNullStringAsEmpty);
        System.out.println(jsonString);
    }
  • 枚舉常量 WriteNullNumberAsZero 字段爲null,序列化爲0

    public void testSerializerFeature(){
        Student student = new Student();
        //student.setAge(20);
        student.setName("chen");
        student.setBirthday(getDate());
        
        String jsonString = JSON.toJSONString(student, SerializerFeature.WriteNullNumberAsZero);
        System.out.println(jsonString);
    }
  • 枚舉常量 WriteNullBooleanAsFalse 字段值爲null 輸出false

  • 枚舉常量 WriteDateUseDateFormat 格式化日期格式

  • 枚舉常量 PrettyFormat格式化輸出

@JSonField註解

該註解做用於方法上,字段上和參數上。可在序列化和反序列化時進行特性功能定製

  • 註解屬性 : name 序列化後的名字;
  • 註解屬性 : ordinal序列化後的順序;
  • 註解屬性 : format序列化後的格式;
  • 註解屬性 : serialize 是否序列化該字段;
  • 註解屬性 : deserialize 是否反序列化該字段;
  • 註解屬性 : serialzeFeatures 序列化時的特性定義。

@JSonType註解

該註解做用於類上,對該類的字段進行序列化和反序列化時的特性功能定製

  • 註解屬性 : includes 要被序列化的字段;
  • 註解屬性 : orders 序列化後的順序;
  • 註解屬性 : serialzeFeatures 序列化時的特性定義。

SSM集成 FastJson

SpringMVC框架中,默認使用的json序列化工具是jackson,咱們須要在SpringMVM的配置文件中,配置消息轉換器,由jackson切換到FastJson。

導入FastJson依賴的jar包

<!-- FastJson -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.47</version>
</dependency>

配置spring-mvc.xml

<mvc:annotation-driven>
  <mvc:message-converters register-defaults="false">
    <!-- FastJson的消息轉換器-->
    <bean id = "fastJson" class="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter">
      <!-- FastJsonHttpMessageConverter類屬性賦值-->
      <property name="supportedMediaTypes">
        <list>
          <value>application/json;charset=UTF-8</value>
        </list>
      </property>
    </bean>
  </mvc:message-converters>
</mvc:annotation-driven>

Controller層

@ResponseBody
@RequestMapping("/allBook")
public String list() {
  
  List<Books> list = bookService.queryAllBook();
  String jsonString = JSON.toJSONString(list);
  //System.out.println(jsonString);
  
  return jsonString;
}
相關文章
相關標籤/搜索