FastJson

Json数据格式回顾

什么是json

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

Json数组格式

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

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

Json对象格式

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

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

    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<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;
}

SSM集成FastJson的更多相关文章

  1. ssm集成redis

    身在一个传统的IT公司,接触的新技术比较少,打算年后跳槽,所以抽空学了一下redis. 简单的redis测试,咱们这边就不讲了,现在主要讲讲ssm集成redis的过程,因为现在项目用的就是ssm的框架 ...

  2. springboot:集成fastjson(教训)

    网上有很多介绍,主要有两种. 1.在启动类中注入bean /** * 集成fastjson * * @return */ @Bean public HttpMessageConverters fast ...

  3. MyBatis进阶讲解+ssm集成

    1.sql映射器Mapper MyBatis基于动态代理机制,让我们无需再编写Dao的实现. 传统Dao接口,现在名称统一以Mapper结尾,还有我们映射器配置文件要和映射器在同一个包. 1.1使用映 ...

  4. SSM集成

    SSM集成   Spring和各个框架的整合   Spring目前是JavaWeb开发中最终的框架,提供一站式服务,可以其他各个框架整合集成   Spring整合方案   SSH Ssh是早期的一种整 ...

  5. java:Mybatis框架3(二级缓存,延时和积极加载,SSI(Ibatis)集成,SSM集成)

    1.二级缓存: 需要导入二级缓存jar包: mybatis03: ehcache.xml: <ehcache xmlns:xsi="http://www.w3.org/2001/XML ...

  6. SSM集成(一):Mybatis3测试

    Spring4+Mybatis3+SpringMVC(基于注解)整合步聚: 一)Mybatis3测试; 二)Mybatis3+Spring4整合; 三)Mybatis3+Spring4+SpringM ...

  7. Spring MVC 学习总结(十)——Spring+Spring MVC+MyBatis框架集成(IntelliJ IDEA SSM集成)

    与SSH(Struts/Spring/Hibernate/)一样,Spring+SpringMVC+MyBatis也有一个简称SSM,Spring实现业务对象管理,Spring MVC负责请求的转发和 ...

  8. 【核心】project(idea文件)、module(iml文件)到SSM集成、热部署、Tomcat启动、MAVEN依赖冲突

    http://wiki.jikexueyuan.com/project/intellij-idea-tutorial/project-composition-introduce.html 在 Inte ...

  9. SSM集成Easyui框架及多模块开发的认识

    首先我们需要建立好一个emaven项目,并且在pom.xml中导入响应的jar包, <?xml version="1.0" encoding="UTF-8" ...

随机推荐

  1. 【知识点】C++的日志框架

    常用的 C++ 日志框架 一.日志框架 一个经过专门设计的实用程序,用于规范应用程序的日志记录过程,就是日志框架.   日志框架可以自己编写(需要一定的能力哦),也可以由第三方(例如:log4cplu ...

  2. 信息论估计工具jidt基本使用

    JIDT基本介绍 JIDT是 Java Information Dynamics Toolkit的简称,用于研究复杂系统中信息论相关度量的计算,它是一个基于java的开源工具库,也可以在Matlab. ...

  3. git时 Failed to connect to 127.0.0.1 port 1080: Connection refused

    在公司换了一台电脑之后发现git clone 和 npm install都失败,报错为 fatal: unable to access 'https://github.com/netease-im/N ...

  4. Python单元测试框架unittest之生成测试报告(HTMLTestRunner)

    前言 批量执行完用例后,生成的测试报告是文本形式的,不够直观,为了更好的展示测试报告,最好是生成HTML格式的. unittest里面是不能生成html格式报告的,需要导入一个第三方的模块:HTMLT ...

  5. 「 题解」NOIP2021模拟赛(2021-07-19)

    小兔的话 欢迎大家在评论区留言哦~ D - 矩阵 简单题意 一个 \(i * i\) 的 \(01\) 矩阵,若满足 每一行 和 每一列 都满足 恰好 有 \(2\) 个位置是 \(1\) 时,称为 ...

  6. Quick BI的复杂系统为例:那些年,我们一起做过的性能优化

    背景 一直以来,性能都是技术层面不可避开的话题,尤其在中大型复杂项目中.犹如汽车整车性能,追求极速的同时,还要保障舒适性和实用性,而在汽车制造的每个环节.零件整合情况.发动机调校等等,都会最终影响用户 ...

  7. 【LeetCode】66. 加一

    66. 加一 知识点:数组: 题目描述 给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一. 最高位数字存放在数组的首位, 数组中每个元素只存储单个数字. 你可以假设除了整数 0 ...

  8. IO编程之IO流

    Java的IO流是实现输入.输出的基础,它可以方便的实现数据的输入输出操作.在Java中把不同的输入输出源(键盘.文件.网络连接)抽象表述为流(stream).通过流可以使java程序使用相同的方式访 ...

  9. python之数据驱动ddt操作(方法二)

    import unittestfrom ddt import ddt,unpack,datafrom selenium import webdriverfrom selenium.webdriver. ...

  10. PAT乙级:1090危险品装箱(25分)

    PAT乙级:1090危险品装箱(25分) 题干 集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里.比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸. 本题给定一张不相容物品的清 ...