阿里巴巴FastJSON使用实例

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
云数据库 RDS PostgreSQL,高可用系列 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)
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
机器学习/深度学习 监控
大模型开发:你如何在保持模型性能的同时减少过拟合的风险?
为应对大模型过拟合,采用正则化(L1/L2/Dropout)、早期停止训练以监控验证集性能,通过数据增强提升模型泛化能力,选择适合问题复杂度的模型,使用集成方法(如Bagging/Boosting)增强稳定性,以及利用预训练模型进行迁移学习。这些策略结合使用能有效降低过拟合风险,提高模型泛化性能。
721 2
|
Web App开发 JavaScript 前端开发
npm私服verdaccio 搭建
npm私服简化团队内部包管理,提供私密组件存储与快速访问。Verdaccio作为热门选择,基于Node.js,易部署且功能丰富。搭建后,CI/CD流程提速,维护统一,版本清晰。安装仅需全局`npm install -g verdaccio`,启动简易。发布组件需注册、登录及`npm publish`至自定义registry。配置文件(`config.yaml`)支持定制,如更换logo或启用HTTPS。常见问题包括主题定制与解决500错误。进阶话题如域名绑定与自动化版本更新将在后续探讨。寻求同道,共同优化与运维,提升私服稳定性与实用性。
434 0
npm私服verdaccio 搭建
|
8月前
|
机器学习/深度学习 人工智能 并行计算
图机器学习调研洞察:PyG与DGL
图神经网络(GNN)是人工智能领域的研究热点,广泛应用于社交网络、电商推荐、欺诈检测等。主流开源图学习引擎如DGL、PyG、GraphScope等在性能和社区活跃度上各有优劣。基于ogbn-products数据集的测试显示,DGL性能最优、内存占用最低,PyG次之。在AI for Science领域,PyG应用更广泛,尤其在小分子和晶体结构预测中表现突出。DGL采用Graph Centric方式,保留图结构;PyG则采用Tensor Centric方式,适合小图场景。
|
消息中间件 NoSQL Java
2024年高频Java面试题集锦(含答案),让你的面试之路畅通无阻!
或许这份面试题还不足以囊括所有 Java 问题,但有了它,我相信你一定不会“败”的很惨,因为有了它,足以应对目前市面上绝大部分的 Java 面试了,因为这篇文章不论是从深度还是广度上来讲,都已经囊括了非常多的知识点了。
|
安全 Windows
Windows提权/杀软进程在线对比
Windows提权/杀软进程在线对比
613 0
Windows提权/杀软进程在线对比
|
区块链 索引
Transformers 4.37 中文文档(九十九)(5)
Transformers 4.37 中文文档(九十九)
117 1
|
缓存 运维 负载均衡
分布式系统架构设计与挑战
【6月更文挑战第29天】分布式系统架构设计涉及组件化、通信、数据一致性、负载均衡和容错处理,旨在实现高可用性和可扩展性。然而,数据一致性、性能、可伸缩性和容错是主要挑战。解决方案包括使用一致性算法、性能优化、设计可伸缩架构和实施容错机制。随着技术进步,这类系统将继续在云、大数据和物联网中扮演关键角色。
|
JSON 数据可视化 定位技术
可视化 | Python绘制高颜值台风地理轨迹图
可视化 | Python绘制高颜值台风地理轨迹图
|
NoSQL 关系型数据库 MySQL
8款优秀的MYSQL管理工具与应用程序推荐
8款优秀的MYSQL管理工具与应用程序推荐
1488 1
8款优秀的MYSQL管理工具与应用程序推荐
|
JSON fastjson Java
FastJson使用技巧
FastJson使用技巧