介绍

Fastjson是一个Java语言编写的高性能功能完善的JSON库。它采用一种“假定有序快速匹配”的算法,把JSON Parse的性能提升到极致,是目前Java语言中最快的JSON库。Fastjson接口简单易用,已经被广泛使用在缓存序列化、协议交互、Web输出、Android客户端等多种应用场景。

教程

maven依赖

com.alibaba

fastjson

1.2.12

API使用

涉及到User和Address两个类,分别如下:

User

class User{

private int id;

private String name;

private int age;

private List

addrList;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public List

getAddrList() {

return addrList;

}

public void setAddrList(List

addrList) {

this.addrList = addrList;

}

}

Address

class Address{

private String province;

private String city;

private String district;

private String detail;

public String getProvince() {

return province;

}

public void setProvince(String province) {

this.province = province;

}

public String getCity() {

return city;

}

public void setCity(String city) {

this.city = city;

}

public String getDistrict() {

return district;

}

public void setDistrict(String district) {

this.district = district;

}

public String getDetail() {

return detail;

}

public void setDetail(String detail) {

this.detail = detail;

}

}

1、序列化

主要通过 JSON.toJSONString方法将Bean转换为json。

String com.alibaba.fastjson.JSON.toJSONString(Object object)

User user = new User();

user.setId(1);

user.setName("ricky");

user.setAge(27);

List

addrList = new ArrayList<>();

Address addr1 = new Address();

addr1.setProvince("北京");

addr1.setCity("北京市");

addr1.setDistrict("朝阳区");

addr1.setDetail("大望路金地中心");

addrList.add(addr1);

Address addr2 = new Address();

addr2.setProvince("湖北省");

addr2.setCity("武汉市");

addr2.setDistrict("武昌区");

addr2.setDetail("江汉路步行街");

addrList.add(addr2);

user.setAddrList(addrList);

System.out.println(user);

String jsonStr = JSON.toJSONString(user);

System.out.println(jsonStr);

结果如下:

{“addrList”:[{“city”:”北京市”,”detail”:”大望路金地中心”,”district”:”朝阳区”,”province”:”北京”},{“city”:”武汉市”,”detail”:”江汉路步行街”,”district”:”武昌区”,”province”:”湖北省”}],”age”:27,”id”:1,”name”:”ricky”}

2、反序列化

主要通过JSON.parSEObject方法将json转换为Bean对象,如下:

T com.alibaba.fastjson.JSON.parSEObject(String text,Class clazz)

String jsonStr = "...";

User user = JSON.parSEObject(jsonStr,User.class);

System.out.println(user);

3、JSONField 介绍

package com.alibaba.fastjson.annotation;

public @interface JSONField {

// 配置序列化和反序列化的顺序,1.1.42版本之后才支持

int ordinal() default 0;

// 指定字段的名称

String name() default "";

// 指定字段的格式,对日期格式有用

String format() default "";

// 是否序列化

boolean serialize() default true;

// 是否反序列化

boolean deserialize() default true;

}

3.1 指定序列化名称

指定User的addrList属性在序列化时变成addr_list,如下:

class User{

private int id;

private String name;

private int age;

@JSONField(name="addr_list")

private List

addrList;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public List

getAddrList() {

return addrList;

}

public void setAddrList(List

addrList) {

this.addrList = addrList;

}

}

结果:

{“addr_list”:[{“city”:”北京市”,”name”:”ricky”}

3.2 使用serialize/deserialize指定字段不序列化

控制age属性不序列化,如下:

class User{

private int id;

private String name;

@JSONField(serialize=false)

private int age;

@JSONField(name="addr_list")

private List

addrList;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public List

getAddrList() {

return addrList;

}

public void setAddrList(List

addrList) {

this.addrList = addrList;

}

}

结果:

{“addr_list”:[{“city”:”北京市”,”name”:”ricky”}

3.3 使用ordinal指定字段的顺序

class User{

@JSONField(ordinal = 1)

private int id;

@JSONField(ordinal = 2)

private String name;

@JSONField(ordinal = 3)

private int age;

@JSONField(name="addr_list",ordinal=4)

private List

addrList;

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public List

getAddrList() {

return addrList;

}

public void setAddrList(List

addrList) {

this.addrList = addrList;

}

}

结果:

{“id”:1,”name”:”ricky”,”addr_list”:[{“city”:”北京市”,”province”:”湖北省”}]}

fastjson所需的依赖_Fastjson使用教程相关推荐

  1. Spring Data JPA教程:获取所需的依赖关系

    在创建使用Spring Data JPA的应用程序之前,我们需要获取所需的依赖关系. 这篇博客文章标识了必需的组件,并描述了如何使用Maven获得它们. 让我们开始吧. 其他阅读:如果您不熟悉Spri ...

  2. guice依赖注入原理_Google Guice依赖注入示例教程

    guice依赖注入原理 Google Guice is the framework to automate the dependency injection in applications. If y ...

  3. matchers依赖_Hamcrest Matchers教程

    matchers依赖 本文是我们名为" 用Mockito测试 "的学院课程的一部分. 在本课程中,您将深入了解Mockito的魔力. 您将了解有关"模拟",&q ...

  4. Mac/Linux 安装联邦学习 Fate 框架单机部署所需的依赖(填坑大全)

    安装过程各种坑,官方单机部署教程,然而官方教程问题超多,我在Mac本机与新建的ubuntu18.04.5上分别单机部署,使用standalone-fate-master-1.4.5.tar.gz,py ...

  5. maven asm 依赖配置_Maven教程_v20201119

    Maven是什么?它的作用有哪些? Maven安装配置和目录结构详解 创建Maven项目(cmd命令) Maven生成站点和报告文档(cmd命令) 使用MyEclipse建立maven项目 使用MyE ...

  6. fastjson 序列化 不包括转义字符_fastjson黑盒测试与白盒审计

    简介与漏洞史 java处理JSON数据有三个比较流行的类库,gson(google维护).jackson.以及今天的主角fastjson,fastjson是阿里巴巴一个开源的json相关的java l ...

  7. linux系统无网络状态下安装nginx及其所需的依赖包

    转载自:https://blog.csdn.net/qq_29440353/article/details/90207486 https://www.cnblogs.com/xxoome/p/5866 ...

  8. centos及ubuntu安装 Puppeteer/rendertron所需的依赖包

    安装谷歌的Puppeteer/rendertron时需要安装一些依赖包, 否则会报错, 整体如下: ubuntu: apt install gconf-service libasound2 libat ...

  9. maven snapshot依赖 打包_Maven教程2:Maven项目构建过程练习

    点击上方"Java技术前线",选择"置顶或者星标" 与你一起成长 上一篇只是简单介绍了一下maven入门的一些相关知识,这一篇主要是体验一下Maven高度自动化 ...

最新文章

  1. java地铁线路规划_地铁线路规划——简单分析
  2. Linux内核同步机制之(四):spin lock【转】
  3. 如何将adb shell里面查到的文件复制到本地电脑
  4. python自动发邮件运行正常就是收不到邮件是为什么_python stmp module 163邮箱发送邮件不成功...
  5. 中式国风地产创意海报素材模板
  6. 华为盒子EC6110-T-通刷-免拆刷机固件及教程
  7. 今夏流行的十大避暑胜地
  8. Kafka 发送消息 Idempotent
  9. css 控制 段落 超出三行的部分显示...
  10. STM32模拟USB多点触控屏
  11. 两周之后,英特尔或将宣布启用芯片代工:直接4nm,2023年出货?
  12. java通过schema校验xml
  13. 基于单片机红外对管测风速控制系统设计(毕设课设)
  14. G++ 中文使用教程
  15. Jmockit使用指南
  16. WordPress程序/functions.php收集整理的各种自定义优化代码分享
  17. 2019春节暖心视频:好久不见,别来无恙
  18. 尚医通-阿里云OSS、用户认证与就诊人
  19. C++中的利剑——vector的模拟实现
  20. 省地市联动组件,java返回树状结构数据解决方案

热门文章

  1. 应届生在参加面试技巧
  2. 离线文档浏览工具Zeal的下载和使用
  3. Power9问世又怎样,一条SQL就把最牛小型机搞瘫了(有彩蛋)
  4. Linux服务器的SSH连接使用
  5. [前端]-JQuery学习
  6. SpringBoot项目不需要数据库配置
  7. 月薪12K运维需要掌握和了解的技术栈
  8. Shiro创建FilterChain过程详解
  9. SpringBoot支付宝扫码支付(沙箱环境)
  10. R:报错“Error in gzfile(file, “wb“) : 无法打开链结”,“‘x‘ must be numeric”及中文路径下利用dev.new()绘图