阿里巴巴FastJSON使用实例

简介: 阿里巴巴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;
相关文章
|
机器学习/深度学习 并行计算 图形学
CPU、GPU、TPU、NPU等到底是什么?
CPU、GPU、TPU、NPU等到底是什么?
6463 3
|
4月前
|
弹性计算 数据可视化
阿里云服务器管理控制台(后台)在哪登录?统一阿里云后台链接入口整理,一键直达
阿里云服务器管理控制台是ECS与轻量应用服务器的统一可视化后台,支持重启、远程连接、重装系统等操作。主入口为控制台首页(home.console.aliyun.com),亦可直连ECS官网:https://t.aliyun.com/U/AZBUsA 或轻量官网:https://t.aliyun.com/U/dwftch
1309 8
|
8月前
|
JSON Java 数据格式
Object转JSON
该方法将Java对象转换为JSON字符串,使用JSONArray.fromObject实现序列化,并输出转换结果日志,最后返回生成的JSON字符串。适用于对象数据的JSON格式化处理。
|
9月前
|
SQL XML 自然语言处理
Text2SQL 破局技术解析之一:规范文本与灵活性
润乾NLQ创新采用“规范文本”作为中间层,将自然语言转SQL分为三阶段:LLM生成可读的规范文本,用户确认意图后,通过规则引擎转为MQL再生成准确SQL。该方案兼顾灵活性、准确性与复杂查询支持,大幅降低企业实施成本,为人机协同的Text2SQL提供了可行的工程化路径。
|
前端开发 安全 API
跨域请求的常见场景有哪些?
了解这些常见的跨域请求场景,有助于我们更好地理解和处理跨域问题,通过合理的技术手段和配置来实现跨域资源的安全访问和交互。
720 64
|
9月前
|
存储 运维 监控
Java云门诊管理系统源码 HIS诊所门诊信息管理系统源码 多租户SaaS模式
SaaS云门诊系统是基于云端的SaaS医疗信息化平台,覆盖挂号、诊疗、收费、药房、库存、医保等全流程管理。支持多租户、快速部署,实现数据共享与业务协同,助力基层医疗机构数字化升级,提升服务效率与患者体验。
424 5
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
531 3
|
数据可视化 IDE 开发工具
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
【Python篇】PyQt5 超详细教程——由入门到精通(中篇二)
1326 13
|
JavaScript API 定位技术
使用vue3结合高德实现定位功能
使用vue3结合高德地图实现定位功能
14258 59
使用vue3结合高德实现定位功能
|
JSON 安全 fastjson
高性能 JSON 处理:为何选择 Fastjson?
Fastjson 是由阿里巴巴集团开发的一个高性能的 JSON 处理库,它支持 Java 对象与 JSON 字符串之间的互相转换。
2622 0
高性能 JSON 处理:为何选择 Fastjson?