fastjson和json对比。fastjson快速入门。
快速预览
- 1. 什么是fastjson
- 2. 什么是JSON
- 3.fastjson如何使用
- 3.1 创建demo
- 3.2 将javaBean转化为JSON字符串
- 3.3 将JSON字符串转化为JavaBean
- 3.4 将JavaBean转化为JSON对象
- 3.5 将JSON对象转化为JavaBean
- 3.6 将JavaBean集合转化为JsonArray
- 3.7 将JSONArray转化为JavaBean集合
- 3.8 将JSON对象转化为JSON字符串
- 3.9 将JSON字符串转化为JSON对象
- 3.10 将JSON字符串转化为JSONArray的形式。
1. 什么是fastjson
fastjson是阿里巴巴推出的一款开源的Json处理器,也是目前比较流行的Json解析器和生成器。
它可以将任何java对象转化为Json,也可以将Json转化为Java对象。
fastjson广泛流行最大的原因就是其优越的性能表现。至今为止,没有一款Json处理工具在性能方面超过fastjson。fastjson支持java和Android两个开发语言。
2. 什么是JSON
在继续了解fastjson之前,要先对json进行了解。如果您想继续了解fastjson的用法:fastjson如何使用
JSON全拼为 JavaScript Object Notation :JavaScript对象表示法。
JavaScript是什么?用来操控Html元素,在Web页面上与用户进行交互的。JSON并不是JS的一种对象,而是用来展示对象信息的一种格式。JSON本质上是一个串字符。
JSON的表现形式如下:
{"name":"张三", "age":23, "gender":"男"};
熟悉Map的朋友应该肯容易看出来这种 key - value 的数据结构。
以上面这段JSON代码为例,上面这一条JSON对象包含三个数据,分别是:
key(键) | value(值) |
---|---|
name | 张三 |
age | 23 |
gender | 男 |
JSON既然是一种数据格式,那么肯定有其特有的语法规则,其规则如下:
JSON对象由花括号{}来保存。
key(键)就是数据名称,通过键来拿去数据中的值。键需要用引号引起来,单双引号都可以,当然,也可以不写引号,不过为了便于和值区分,最好加上。
值就是普通的数据类型了。它支持以下数据类型:
数字(整数或浮点数)
字符串("")
逻辑值(true or false)
数组(方括号)
[{"key", "value"},{"key2", true} ]
对象(花括号)
{'name':"李四", 'gender':0}
null
数组和对象是可以相互嵌套的:
{'person':[{'name':"张三", 'age':22},{'name':"李四", 'age':23}],'class':[{'name':"化工本一", 'id':0901},{'name':"英语本一", 'id':1201}] }
3.fastjson如何使用
这里我们将通过一个demo来了解fastjson的功能和用法。在此之前,我们先来了解一下fastjson的一个常用注解:
@JSONField(属性 = “xxx”, …),用在字段上。
属性 | 作用 |
---|---|
name | Json中的key(键) |
ordinal | 按照值的从小到大顺序来输出java对象的字段内容 |
format | 用在date上, 按照定义的类型显示时间 |
serialize | 是否序列化(将java对象转化为字节类型的过程) |
deserialize | 是否反序列化(将字节类型转化为java对象的过程) |
在日常工作中,我们会用到@JSONField()注解来对字段进行修饰,得到想要的结果。
接下来,将通过demo来了解fastjson的用法。
3.1 创建demo
这里我们首先要在maven中导入maven依赖:
<dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>x.x.x</version></dependency>
接下来创建一个用户类:
@Data
@AllArgsConstructor()
@NoArgsConstructor()
public class User {@JSONField(name = "姓名", ordinal = 1, serialize = false)private String name;@JSONField(name = "性别", ordinal = 2)private Integer gender;@JSONField(name = "邮箱", ordinal = 3)private String email;//无参构造和有参构造以及get/set方法通过Lombok创建
}
接下来,创建测试类:
@Test
void testToString() throws JSONException {List<User> users = new ArrayList<>();User user1 = new User("张三", 1, "123@123.com");User user2 = new User("王五", 1, "233@233.com");users.add(user1);users.add(user2);
}
3.2 将javaBean转化为JSON字符串
首先将上面的User类转化为Json字符串。
//JSON.toJSONString(Object)
String jsonString = JSON.toJSONString(user1);
System.out.println(jsonString);
运行查看输出结果:
{"性别":1,"邮箱":"123@123.com"}
可以看到,不允许序列化的name字段,并没有在json字符串中显示出来,也就是说,fastjson没有解析该字段,只对其他字段进行了转化。
为了方便后面的操作,我们将User类中name字段的序列化设置为true(默认即为true,因此可以不写).
@JSONField(name = "名字", ordinal = 1, serialize = true)
private String name;
再次运行查看输出结果:
{"名字":"张三","性别":1,"邮箱":"123@123.com"}
可以发现User类中的name字段又被解析出来了。
3.3 将JSON字符串转化为JavaBean
//JSON.parseObject(JSONString, Class<Object>)
User stringToBean = JSON.parseObject(beanToString, User.class);
System.out.println(stringToBean);
System.out.println(user1);
运行查看输出结果:
User(name=张三, gender=1, email=123@123.com)
User(name=张三, gender=1, email=123@123.com)
可以发现转化后的对象和User1一致。
3.4 将JavaBean转化为JSON对象
//JSON.toJSON(Object)
JSONObject beanToObj = (JSONObject) JSON.toJSON(user2);
System.out.println(beanToObj.getString("名字"));
System.out.println(beanToObj);
运行程序查看输出结果:
王五
{"名字":"王五","邮箱":"233@233.com","性别":1}
可以发现原来的JavaBean对象被转化为了JSON对象。
至于代码中为什么要强转JSONObject,是因为toJSON()方法的返回值为Object,在其内部对方法传入的对象进行了类型判断,我们找到JavaBean的判断方法:
ObjectSerializer serializer = config.getObjectWriter(clazz);
if (serializer instanceof JavaBeanSerializer) {JavaBeanSerializer javaBeanSerializer = (JavaBeanSerializer) serializer;JSONObject json = new JSONObject();try {Map<String, Object> values = javaBeanSerializer.getFieldValuesMap(javaObject);for (Map.Entry<String, Object> entry : values.entrySet()) {json.put(entry.getKey(), toJSON(entry.getValue(), config));}} catch (Exception e) {throw new JSONException("toJSON error", e);}return json;
}
可以发现其返回的是一个JSONObject对象。
JSONObject是Object的子类,也就是说父类Object可以接收JSONObject中的属性,但额外的子类方法在Object中是没办法使用的。
那么此时就可以用到父类强转了,将Object强转为JSONObject类,从而调用JSONObject中的方法,实现功能。
3.5 将JSON对象转化为JavaBean
//JSON.toJavaObject(JSONObject, Class<Object>)
User objToBean = JSON.toJavaObject(beanToObj, User.class);
System.out.println(objToBean);
运行程序查看结果:
User(name=王五, gender=1, email=233@233.com)
3.6 将JavaBean集合转化为JsonArray
// JSON.toJSON(Object)
JSONArray listBeanToJsonArray = (JSONArray) JSON.toJSON(users);
listBeanToJsonArray.forEach(System.out::println);
运行查看结果:
{"名字":"张三","邮箱":"123@123.com","性别":1}
{"名字":"王五","邮箱":"233@233.com","性别":1}
这里也是调用了toJSON方法,在判断条件中,返回了一个JSONArray集合,同样的整个方法返回值也是Object。然而Java不能自动将Object(上层)转化为JSONArray(下层),所以,我们需要手动添加强转。
3.7 将JSONArray转化为JavaBean集合
//这里通过forEach循环遍历Json集合,然后将Json对象转化为JavaBean对象,最终将Java对象添加到Java集合中
List<User> listJsonArrayToBean = new ArrayList<>();
listBeanToJsonArray.forEach( json -> {User user = JSON.toJavaObject((JSON) json, User.class);listJsonArrayToBean.add(user);
});
listJsonArrayToBean.forEach(System.out::println);
运行查看结果:
User(name=张三, gender=1, email=123@123.com)
User(name=王五, gender=1, email=233@233.com)
3.8 将JSON对象转化为JSON字符串
//JSONObject.toJSONString(JSONObject)
String objToString = JSONObject.toJSONString(beanToObj);
System.out.println(objToString);
运行查看结果:
{"名字":"王五","邮箱":"233@233.com","性别":1}
3.9 将JSON字符串转化为JSON对象
//JSON.parseObject(JSONString)
JSONObject stringToObj = JSON.parseObject(objToString);
System.out.println(stringToObj.getString("邮箱"));
运行查看结果:
233@233.com
3.10 将JSON字符串转化为JSONArray的形式。
//JSON.parseArray(JSONString)
JSONArray stringToJsonArray = JSON.parseArray(JSON.toJSONString(users));
stringToJsonArray.forEach(System.out::println);
运行查看结果:
{"名字":"张三","邮箱":"123@123.com","性别":1}
{"名字":"王五","邮箱":"233@233.com","性别":1}
fastjson和json对比。fastjson快速入门。相关推荐
- python对比php快速入门(语言为python2.7)
python快速入门 比较方面:变量,字符串,数组,判断,循环,函数 ,命令行参数,时间,文件,数组操作,调试 Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所 ...
- java对比php快速入门
比较方面:变量,字符串,数组,判断,循环,函数 ,命令行参数,时间,文件,数组操作,调试 比较项目 php java 变量 弱类型语言,变量可以任意代表任何类型 $age = 13; $name = ...
- Solr快速入门(一)
概述 本文档介绍了如何获取和运行Solr,将各种数据源收集到多个集合中,以及了解Solr管理和搜索界面. 首先解压缩Solr版本并将工作目录更改为安装Solr的子目录.请注意,基本目录名称可能随Sol ...
- Petalinux快速入门向导 (1) 目录
目录 Petalinux快速入门向导 (2) 第一章.测试环境和软件下载 第一章. 测试环境和软件下载 1. Ubuntu16.04 2. PetaLinux2020.1 Petali ...
- solor快速_Solr快速入门(一)
概述 本文档介绍了如何获取和运行Solr,将各种数据源收集到多个集合中,以及了解Solr管理和搜索界面. 首先解压缩Solr版本并将工作目录更改为安装Solr的子目录.请注意,基本目录名称可能随Sol ...
- Jackson、FastJson快速入门(整合SpringMVC)
目录 1. 什么是 JSON 2. JSON 语法规则 3. JSON 与 JS 对象的关系 4. JSON 和 JS 对象互转 5. Jackson-数据格式转换 1. 环境搭建 2. 对象转jso ...
- 各个JSON技术的比较(Jackson,Gson,Fastjson)的对比
JSON技术的调研报告 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包, 包括 ...
- Android中的JSON解析方式:json; Gson ; Fastjson
本文主要介绍Json数据的解析 ----a,json数据的介绍 ----b,json数据的解析 ----c,gson数据的解析,谷歌公司的一种格式 ----d,fastjson数据的解析,阿里巴巴的一 ...
- Android之JSON处理器FastJson
FastJson fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发 主要特点: 快速FAST (比其它任何基于Java的解析器和生成器更快, ...
最新文章
- 2022-2028年中国锂电池用聚烯烃隔膜行业市场发展调研及投资方向分析报告
- 简单两行,实现无线WiFi共享上网,手机抓包再也不用愁了
- zabbix自定义监控脚本,显示权限不足
- hdu 5008 Boring String Problem(后缀数组+rmq)
- iOS 之UITextFiled/UITextView小结
- codesmith使用的一个小问题
- 客户机和服务器在s7通信中各有什么作用,哪些通信口可以进行 Modbus TCP 通讯,作为 Modbus 服务器的 SIMATIC S7 CPU 可以...
- UIViewController生命周期的理解
- struts2 中 constant标签
- 【网络安全】PGP/GPG优质教程汇总
- python整人小代码_整人代码大全
- html学习——按钮与多选框
- 马斯洛人类需求金字塔理论
- 理解Window和WindowManager
- MATLAB计算二阶系统单位阶跃响应及在for循环中在图像加图例
- 计算机格式为gpt怎么更改,硬盘格式转换,手把手教你如何将硬盘mbr格式转换为gpt格式...
- 单片机中断的基本概念
- 最新美团-青龙——5-25
- qq邮箱993服务器地址,ios邮箱绑定qq邮箱提示993服务器连接超时
- 使用python生成图片验证码