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)

阿里巴巴FastJSON使用实例的更多相关文章

  1. 阿里巴巴fastJson

    FastJson解析 一.阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java ...

  2. SpringBoot阿里巴巴Fastjson的一些常用配置

    SpringBoot阿里巴巴Fastjson的一些常用配置 @Bean public HttpMessageConverters fastJsonHttpMessageConverters() { F ...

  3. Fastjson使用实例

    Fastjson使用实例 一.FastJson使用范例 1.1FastJson三个核心类 1.2Maven依赖 1.3Scala API 1.3.1反序列化 1.3.2序列化 1.4Java API ...

  4. 阿里巴巴fastjson 包的使用解析json数据

    Fastjson是一个Java语言编写的高性能功能完善的JSON库.由阿里巴巴公司团队开发的. 主要特性主要体现在以下几个方面: 1.高性能 fastjson采用独创的算法,将parse的速度提升到极 ...

  5. 阿里巴巴fastjson源码阅读(待完成)

    git地址:https://github.com/alibaba/fastjson.git

  6. 阿里巴巴fastjson的使用

    一.项目结构 一个学生类.当中学生类中能够包括Course类对象 使用Maven管理项目的能够加入fastjson的坐标: <dependency> <groupId>com. ...

  7. 阿里巴巴fastJson进行json数据解析

    1.生成JsonObject:将Java bean转换成易于处理和传输的strig的key value形式. 2.解析JsonObject:将收到的字符串转换成JsonObejct这种对象形式,Jso ...

  8. SpringMVC整合FreeMarker实例

    FreeMarker作为模板引擎,是比较常用的. FreeMarker官方文档地址为:https://freemarker.apache.org/ 现在浏览器或者翻译工具这么多,对于英文方面,我想大多 ...

  9. Java的Json解析包FastJson使用

    阿里巴巴FastJson是一个Json处理工具包,包括“序列化”和“反序列化”两部分,它具备如下特征:速度最快,测试表明,fastjson具有极快的性能,超越任其他的Java Json parser. ...

随机推荐

  1. 配置Info.plist (设置状态栏样式、自定义定位时系统弹出的提示语、配置3DTouch应用快捷菜单)

    一.概述 iOS中很多功能需要配置Info.plist才能实现,如设置后台运行.支持打开的文件类型.自定义访问隐私内容时弹出的提示等.了解Info.plist中各字段及其含义,可以访问苹果开发网站相关 ...

  2. Docker 持续集成初次体验

    背景 在家的时候,实在不想做其他的,想起之前参加的一场关于docker的座谈会,于是想搞以下docker. 开始 在道客云上搞了一下持续集成,总体来说,比较好用的. 写了一个Go程序,就是之前写的发邮 ...

  3. nuget.org无法解析的办法

    今天想学习ef框架,就着手安装最新的ef啦.可是遇到了问题,提示 未能解析此远程名称:'nuget.org' 就去上网找资料啦,发现原来是被墙了,表示无奈. 网上的资料提示,修改hosts文件或是dn ...

  4. 在 Centos7 的KVM上启用嵌套虚拟化

    1.嵌套虚拟化意味着在虚拟机内配置虚拟化环境.换句话说,我们可以说嵌套虚拟化是虚拟机管理程序hypervisor的一个特性,它允许我们通过虚拟化管理程序(宿主机)的硬件加速在虚拟服务器内安装和运行虚拟 ...

  5. C#为什么不能像C/C++一样的支持函数只读传参

    C#为什么不能像C/C++一样的支持函数只读传参? 这个问题其实问的人挺多的,我自己也经常想实现这个功能,但是发现总是那么的不尽人意. 有些人倒是给出了一下答案,但是都不能很好的解决像C/C++一样的 ...

  6. .NET MVC 学习笔记(六)— 数据导入

    .NET MVC 学习笔记(六)—— 数据导入 在程序使用过程中,有时候需要新增大量数据,这样一条条数据去Add明显不是很友好,这时候最好就是有一个导入功能,导入所需要的数据,下面我们就一起来看一下导 ...

  7. jquery banner 轮播配置方法

    1 概述 Banner可以作为网站页面的横幅广告,也可以作为游行活动时用的旗帜,还可以是报纸杂志上的大标题.Banner主要体现中心意旨,形象鲜明表达最主要的情感思想或宣传中心.在以往很多项目中主要体 ...

  8. mysql5.7 安装错误解决

    1.5.7初始化报错 2019-04-29 21:40:34 [ERROR] Child process: /home/work/mysql/bin/mysqldterminated prematur ...

  9. [NOI2017]蔬菜(贪心)

    神仙题啊! 早上开了两个多小时,终于肝出来了,真香 我们考虑从第 \(10^5\) 天开始递推,先生成 \(p=10^5\) 的解,然后逐步推出 \(p-1,...,2,1\) 的解. 那怎么推出 \ ...

  10. TmsTimeUtils 时间戳

    package com.sprucetec.tms.utils; import java.math.BigDecimal;import java.text.DateFormat;import java ...