SSM集成FastJson
发布日期:2021-05-09 01:47:10 浏览次数:17 分类:博客文章

本文共 5617 字,大约阅读时间需要 18 分钟。

FastJson

Json数据格式回顾

什么是json

JSON:(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript(欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。目前,Json处于数据交换语言的王者地位。

Json数组格式

Json的数据本身是数组,中括号包裹。数组的元素之间用“,”分开,数组元素的数据类型没有限制。

//定义数组格式jsonvar jsonArray = ["a1","a2",...];  //打印json数组的a1元素console.log(jsonArray[0]);

Json对象格式

Json的数据本身是对象,大括号去包裹。对象采用键值对形式存储,键固定为字符串类型,值是任意类型的数据,键和值使用“:”分开。

//定义对象格式jsonvar 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. 对象中的值是数组

    var jsonObject = {    "k1":["a1","a2"],    "k2":["b1","b2"]}; // 定义对象格式json,键是字符串类型,值是数组console.log(jsonObject.k1[0]); //访问对象的键是k1,对于的值为数组,数组的0索引元素
  3. 互相嵌套

    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 的优点

  • 速度快
    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
    list = new ArrayList
    (); 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
    map = new HashMap
    (); 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
    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
    parse = JSON.parseObject(jsonString,new TypeReference
    >(){}); 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包

com.alibaba
fastjson
1.2.47

配置spring-mvc.xml

application/json;charset=UTF-8

Controller层

@ResponseBody@RequestMapping("/allBook")public String list() {    List
list = bookService.queryAllBook(); String jsonString = JSON.toJSONString(list); //System.out.println(jsonString); return jsonString;}

上一篇:Spring MVC+javamail实现邮件发送
下一篇:C++基础学习第一天

发表评论

最新留言

初次前来,多多关照!
[***.217.46.12]2025年04月22日 15时15分25秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章