阿里巴巴FastJSON使用实例

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 阿里巴巴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)
相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
itextpdf 中文不显示问题
# 现象 itextpdf 打印时中文字体显示不出来,莫名其妙的消失不见了。具体现象如下图所示。 ![](https://ata2-img.oss-cn-zhangjiakou.aliyuncs.com/neweditor/ddc69588-4fc6-46ff-9d33-07f99340c963.png) 真正的理想情况如下图。 ![](https://ata2-img.oss-cn-zhangj
itextpdf 中文不显示问题
|
IDE Java 程序员
IDEA创建maven项目过慢,一直卡在resolving dependencies...的解决办法
作为一个从事 Java 开发的程序员,每天离不开ide的帮助。一开始学习java的时候基本都是使用eclipse进行开发, 后来接触了idea,发现是真的香,比eclipse好用太多了,能够大大提升开发的效率。
4813 0
IDEA创建maven项目过慢,一直卡在resolving dependencies...的解决办法
|
消息中间件 SQL 存储
超详细的RabbitMQ入门,看这篇就够了!
RabbitMQ入门,看这篇就够了
210032 65
|
消息中间件 Java 物联网
一文搞懂MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布
之前介绍了RabbitMQ以及如何在SpringBoot项目中整合使用RabbitMQ,看过的朋友都说写的比较详细,希望再总结一下目前比较流行的MQTT。所以接下来,就来介绍什么MQTT?它在IoT中有着怎样的作用?如何在项目中使用MQTT?
17255 5
一文搞懂MQTT,如何在SpringBoot中使用MQTT实现消息的订阅和发布
|
Java 数据库连接 数据库
|
消息中间件 NoSQL Java
2024年高频Java面试题集锦(含答案),让你的面试之路畅通无阻!
或许这份面试题还不足以囊括所有 Java 问题,但有了它,我相信你一定不会“败”的很惨,因为有了它,足以应对目前市面上绝大部分的 Java 面试了,因为这篇文章不论是从深度还是广度上来讲,都已经囊括了非常多的知识点了。
|
10月前
|
存储 Python
python二进制类型 (Binary Types)
【8月更文挑战第3天】
366 8
HTML+CSS+JS实现十款好看的登录注册界面模板,赶紧收藏起来吧!(二)
HTML+CSS+JS实现十款好看的登录注册界面模板,赶紧收藏起来吧!
|
JSON fastjson Java
FastJson使用技巧
FastJson使用技巧
|
Java Maven
解决IntelliJ IDEA执行maven打包,执行java -jar命令提示jar中没有主清单属性
执行`java -jar app.jar`命令后,提示jar中没有主清单属性
3802 1