快速预览

  • 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既然是一种数据格式,那么肯定有其特有的语法规则,其规则如下:

  1. JSON对象由花括号{}来保存。

  2. key(键)就是数据名称,通过键来拿去数据中的值。键需要用引号引起来,单双引号都可以,当然,也可以不写引号,不过为了便于和值区分,最好加上。

  3. 值就是普通的数据类型了。它支持以下数据类型:

    • 数字(整数或浮点数)

    • 字符串("")

    • 逻辑值(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快速入门。相关推荐

  1. python对比php快速入门(语言为python2.7)

    python快速入门 比较方面:变量,字符串,数组,判断,循环,函数 ,命令行参数,时间,文件,数组操作,调试 Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,所 ...

  2. java对比php快速入门

    比较方面:变量,字符串,数组,判断,循环,函数 ,命令行参数,时间,文件,数组操作,调试 比较项目 php java 变量 弱类型语言,变量可以任意代表任何类型 $age = 13; $name = ...

  3. Solr快速入门(一)

    概述 本文档介绍了如何获取和运行Solr,将各种数据源收集到多个集合中,以及了解Solr管理和搜索界面. 首先解压缩Solr版本并将工作目录更改为安装Solr的子目录.请注意,基本目录名称可能随Sol ...

  4. Petalinux快速入门向导 (1) 目录

    目录 Petalinux快速入门向导 (2) 第一章.测试环境和软件下载 第一章. 测试环境和软件下载     1. Ubuntu16.04     2. PetaLinux2020.1 Petali ...

  5. solor快速_Solr快速入门(一)

    概述 本文档介绍了如何获取和运行Solr,将各种数据源收集到多个集合中,以及了解Solr管理和搜索界面. 首先解压缩Solr版本并将工作目录更改为安装Solr的子目录.请注意,基本目录名称可能随Sol ...

  6. Jackson、FastJson快速入门(整合SpringMVC)

    目录 1. 什么是 JSON 2. JSON 语法规则 3. JSON 与 JS 对象的关系 4. JSON 和 JS 对象互转 5. Jackson-数据格式转换 1. 环境搭建 2. 对象转jso ...

  7. 各个JSON技术的比较(Jackson,Gson,Fastjson)的对比

    JSON技术的调研报告 一 .各个JSON技术的简介和优劣 1.json-lib json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包, 包括 ...

  8. Android中的JSON解析方式:json; Gson ; Fastjson

    本文主要介绍Json数据的解析 ----a,json数据的介绍 ----b,json数据的解析 ----c,gson数据的解析,谷歌公司的一种格式 ----d,fastjson数据的解析,阿里巴巴的一 ...

  9. Android之JSON处理器FastJson

    FastJson fastjson 是一个性能很好的 Java 语言实现的 JSON 解析器和生成器,来自阿里巴巴的工程师开发 主要特点: 快速FAST (比其它任何基于Java的解析器和生成器更快, ...

最新文章

  1. 2022-2028年中国锂电池用聚烯烃隔膜行业市场发展调研及投资方向分析报告
  2. 简单两行,实现无线WiFi共享上网,手机抓包再也不用愁了
  3. zabbix自定义监控脚本,显示权限不足
  4. hdu 5008 Boring String Problem(后缀数组+rmq)
  5. iOS 之UITextFiled/UITextView小结
  6. codesmith使用的一个小问题
  7. 客户机和服务器在s7通信中各有什么作用,哪些通信口可以进行 Modbus TCP 通讯,作为 Modbus 服务器的 SIMATIC S7 CPU 可以...
  8. UIViewController生命周期的理解
  9. struts2 中 constant标签
  10. 【网络安全】PGP/GPG优质教程汇总
  11. python整人小代码_整人代码大全
  12. html学习——按钮与多选框
  13. 马斯洛人类需求金字塔理论
  14. 理解Window和WindowManager
  15. MATLAB计算二阶系统单位阶跃响应及在for循环中在图像加图例
  16. 计算机格式为gpt怎么更改,硬盘格式转换,手把手教你如何将硬盘mbr格式转换为gpt格式...
  17. 单片机中断的基本概念
  18. 最新美团-青龙——5-25
  19. qq邮箱993服务器地址,ios邮箱绑定qq邮箱提示993服务器连接超时
  20. 使用python生成图片验证码

热门文章

  1. Snail—不是所有的牛都叫蜗牛
  2. GD32f103 DFU升级
  3. 解决微信小程序上传图片不能回显的问题
  4. 【Unity3D】快速上手 EasyAR
  5. emoji 表情 php 转换,emoji的表情转换PHP类库
  6. LOL历届MSI冠军2023
  7. 三秒教会你如何使用scrcpy手机无线投屏到电脑
  8. 『已解决』浏览器出现 Err_proxy_connection_failed
  9. 利用makehumancommunity导入人体模型到COMSOL里(需要solidwork)
  10. 通过PPG“神话” 论服装电子商务