阿里巴巴FastJSON使用实例

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 阿里巴巴FastJSON使用实例

1. 什么是fastjson?


fastjson是阿里巴巴的开源JSON解析库,它可以解析JSON格式的字符串,支持将Java Bean序列化为JSON字符串,也可以从JSON字符串反序列化到JavaBean。


Fastjson使用场景

 

Fastjson已经被广泛使用在各种场景,包括cache存储、RPC通讯、MQ通讯、网络协议通讯、Android客户端、Ajax服务器处理程序等等。


2.fastjson的优点


2.1 速度快


fastjson相对其他JSON库的特点是快,从2011年fastjson发布1.1.x版本之后,其性能从未被其他Java实现的JSON库超越。


2.2 使用广泛


fastjson在阿里巴巴大规模使用,在数万台服务器上部署,fastjson在业界被广泛接受。在2012年被开源中国评选为最受欢迎的国产开源软件之一。


2.3 测试完备


fastjson有非常多的testcase,在1.2.11版本中,testcase超过3321个。每次发布都会进行回归测试,保证质量稳定。


2.4 使用简单


fastjson的API十分简洁。


String text = JSON.toJSONString(obj); //序列化
VO vo = JSON.parseObject("{...}", VO.class); //反序列化


2.5 功能完备


支持泛型,支持流处理超大文本,支持枚举,支持序列化和反序列化扩展。

以下例子对JSON.toJSONString和JSON.parseObject这2个重要方法进行测试:

 

Fruit实体类:


 package com.led.daorumysql;
  /**
   * 定义水果实体类
   * @author 86157
   *
   */
  public class Fruit {
     //水果名字
     private String name;
     //水果产地
     private String origin;
    //水果价格
     private Integer price;
     public String getName() {
         return name;
     }
     public void setName(String name) {
         this.name = name;
     }
     public String getOrigin() {
         return origin;
     }
     public void setOrigin(String origin) {
         this.origin = origin;
     }
     public Integer getPrice() {
         return price;
     }
     public void setPrice(Integer price) {
         this.price = price;
    }
     @Override
     public String toString() {
         return "Fruit [name=" + name + ", origin=" + origin + ", price=" + price + "]";
     }
     public Fruit(String name, String origin, Integer price) {
         super();
         this.name = name;
         this.origin = origin;
         this.price = price;
     }
     public Fruit() {
         super();
     }
 }

主类:


 package com.led.daorumysql;
  import java.util.ArrayList;
  import java.util.List;
  import com.alibaba.fastjson.JSON;
  /**
   * FastJSON测试类
  * @author 86157
  *
  */
 public class FastJSONTest {
     public static void main(String[] args) {
        //实例化Fruit类
         Fruit fruitOne = new Fruit("apple", "America", 13);
         Fruit fruitTwo = new Fruit("orange", "China", 15);
         //创建fruitList对象
        List<Fruit> fruitList = new ArrayList<Fruit>();
         fruitList.add(fruitOne);
         fruitList.add(fruitTwo);
         //将java对象(Fruit)转成json字符串
         System.out.println("=========将java对象(Fruit)转成json字符串===========");
         String fruitOne_jsonString = JSON.toJSONString(fruitOne);
         System.out.println("fruitOne_jsonString: " + fruitOne_jsonString);
         System.out.println();
         //将json字符串转成java对象(Fruit)
         System.out.println("=========将json字符串转成java对象(Fruit)===========");
         Fruit fruitOne_parseObject = JSON.parseObject(fruitOne_jsonString, Fruit.class);
         System.out.println("fruit object: " + fruitOne_parseObject);
         System.out.println("fruit name: " + fruitOne_parseObject.getName());
         System.out.println("fruit origin: " + fruitOne_parseObject.getOrigin());
         System.out.println("fruit price: " + fruitOne_parseObject.getPrice());
         System.out.println();
         //将java对象(fruitList)转成json字符串
         System.out.println("=========将java对象(fruitList)转成json字符串========");
         String fruitList_jsonString = JSON.toJSONString(fruitList);
        System.out.println("fruitList_jsonString: " + fruitList_jsonString);
         System.out.println();
         //将json字符串转成java对象(fruitList)
         System.out.println("=========将json字符串转成java对象(fruitList)========");
         List<Fruit> parseArray = JSON.parseArray(fruitList_jsonString, Fruit.class);
         System.out.println("fruitOne object: " + parseArray.get(0).toString());
         System.out.println("fruitTwo object: " + parseArray.get(1).toString());
         System.out.println("fruitTwo object name: " + parseArray.get(1).getName());
     }
 }

控制台输出:


 =========将java对象(Fruit)转成json字符串===========
  fruitOne_jsonString: {"name":"apple","origin":"America","price":13}
  =========将json字符串转成java对象(Fruit)===========
  fruit object: Fruit [name=apple, origin=America, price=13]
  fruit name: apple
  fruit origin: America
  fruit price: 13
 =========将java对象(fruitList)转成json字符串========
 fruitList_jsonString: [{"name":"apple","origin":"America","price":13},{"name":"orange","origin":"China","price":15}]
 =========将json字符串转成java对象(fruitList)========
 fruitOne object: Fruit [name=apple, origin=America, price=13]
 fruitTwo object: Fruit [name=orange, origin=China, price=15]
 fruitTwo object name: orange

注意:


实体类中要创建构造方法,不然parseObject会报如下错误:


Exception in thread "main" com.alibaba.fastjson.JSONException: default constructor not found. class com.led.daorumysql.Fruit
    at com.alibaba.fastjson.util.JavaBeanInfo.build(JavaBeanInfo.java:197)
    at com.alibaba.fastjson.parser.ParserConfig.createJavaBeanDeserializer(ParserConfig.java:465)
    at com.alibaba.fastjson.parser.ParserConfig.getDeserializer(ParserConfig.java:412)
    at com.alibaba.fastjson.parser.ParserConfig.getDeserializer(ParserConfig.java:324)
    at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:594)
    at com.alibaba.fastjson.parser.DefaultJSONParser.parseObject(DefaultJSONParser.java:569)
    at com.alibaba.fastjson.JSON.parseObject(JSON.java:257)
    at com.alibaba.fastjson.JSON.parseObject(JSON.java:227)
    at com.alibaba.fastjson.JSON.parseObject(JSON.java:186)
    at com.alibaba.fastjson.JSON.parseObject(JSON.java:310)
    at com.led.daorumysql.FastJSONTest.main(FastJSONTest.java:27)
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
Dubbo Cloud Native Java
重磅下载 | Java 开发者必备手册《Spring Cloud Alibaba 从入门到实战》,阿里双11同款!
Spring Cloud Alibaba 脱胎于阿里中间件团队内部,经受了阿里多年海量业务场景的考验,是目前最成熟、功能最丰富也最有前景的 Spring Cloud 实现。相信在未来 Spring Cloud Alibaba 获得更多开发者的亲睐与应用,这也将成为 Java 开发者必不可少的技能之一。
130040 0
重磅下载 | Java 开发者必备手册《Spring Cloud Alibaba 从入门到实战》,阿里双11同款!
|
11月前
|
存储 前端开发 JavaScript
|
JSON 安全 fastjson
《Elastic(中国)基础开发宝典》——Elasticsearch是否受最新的 fastjson 反序列化漏洞的影响?
《Elastic(中国)基础开发宝典》——Elasticsearch是否受最新的 fastjson 反序列化漏洞的影响?
|
缓存 算法 安全
继 SpringBoot 3.0,Elasticsearch8.0 官宣:拥抱 Java 17
继 SpringBoot 3.0,Elasticsearch8.0 官宣:拥抱 Java 17
139 0
继 SpringBoot 3.0,Elasticsearch8.0 官宣:拥抱 Java 17
|
Cloud Native 前端开发 Java
Spring6 正式发布!重磅更新,是否可以拯救 Java
SpringFramework6.0.0 了!这是 2023 年及以后新一代框架的开始,包括 OpenJDK 和 Java 生态系统中当前和未来的创新。同时,我们将其精心设计为从 Spring Framework 5.3.x 直接升级到现代运行时环境。作为核心框架的一个主要修订,Spring framework 6.0 附带了 Java 17+基线和 Jakarta EE 9+(在 Jakarta 命名空间中),重点是最近发布的 Jakarta EE10 API,如 Servlet 6.0 和 JPA 3.1。这提供了对最新 web 容器(如 Tomcat 10.1)和最新持久性提供程序(如
Spring6 正式发布!重磅更新,是否可以拯救 Java
|
JSON fastjson Java
为什么我们公司强制弃坑FastJson了?主推Jackson~
为什么我们公司强制弃坑FastJson了?主推Jackson~
694 0
为什么我们公司强制弃坑FastJson了?主推Jackson~
|
安全 网络协议 NoSQL
阿里华为技术专家教你如何实现一个Java连接池?(上)
阿里华为技术专家教你如何实现一个Java连接池?
232 0
阿里华为技术专家教你如何实现一个Java连接池?(上)
|
NoSQL 安全 网络协议
阿里华为技术专家教你如何实现一个Java连接池?(下)
阿里华为技术专家教你如何实现一个Java连接池?
92 0
阿里华为技术专家教你如何实现一个Java连接池?(下)
|
存储 JSON fastjson
FastJson在Java后端方面解析使用(二)
FastJson在Java后端方面解析使用(二)
376 0
FastJson在Java后端方面解析使用(二)
|
JSON 安全 IDE
用了几年的 Fastjson,我最终替换成了Jackson!
为什么要替换fastjson 工程里大量使用了fastjson作为序列化和反序列化框架,甚至ORM在处理部分字段也依赖fastjson进行序列化和反序列化。那么作为大量使用的基础框架,为什么还要进行替换呢?
1387 0
用了几年的 Fastjson,我最终替换成了Jackson!