FastJson基本使用

简介: FastJson基本使用

1. FastJson序列化API

  • 方法:JSON.toJSONString
  • 序列化 : 是指将Java对象转成json格式字符串的过程。JavaBean对象、List集合对象、Map集合 为应用最广泛的。

1.1 序列化Java对象

  • Java 中的 Student 对象 序列化 为 JSON 格式 字符串
@Test
public void objectToJson(){
    Student student = new Student();
    student.setId(1);
    student.setName("兮动人");
    student.setAge(24);
    student.setAddress("深圳市");
    student.setFlag(true);

    String jsonString = JSON.toJSONString(student);
    System.out.println(jsonString);
}

在这里插入图片描述

{
    "address":"深圳市",
    "age":24,
    "flag":true,
    "id":1,
    "name":"兮动人"
    
}

1.2 序列化List集合

@Test
public void listToJson(){
    Student student = new Student();
    student.setId(1);
    student.setName("兮动人");
    student.setAge(24);
    student.setAddress("深圳市");
    student.setFlag(true);

    Student student2 = new Student();
    student2.setId(2);
    student2.setName("Mike");
    student2.setAge(25);
    student2.setAddress("北京市");
    student2.setFlag(false);

    List<Student> list = new ArrayList<Student>();
    list.add(student);
    list.add(student2);

    String jsonString = JSON.toJSONString(list);
    System.out.println(jsonString);
}

在这里插入图片描述

[{
"address":"深圳市","age":24,"flag":true,
"id":1,"name":"兮动人"},{"address":"北京市","age":25,"flag":false,"id":2,"name":"Mike"}]
  • 可以观察到 JSON 默认排序是按a-z字母顺序排的
[
    {
        "address":"深圳市",
        "age":24,
        "flag":true,
        "id":1,
        "name":"兮动人"
    },
    {
        "address":"北京市",
        "age":25,
        "flag":false,
        "id":2,
        "name":"Mike"
    }
]

1.3 序列化Map集合

@Test
public void mapToJson(){
    Student student = new Student();
    student.setId(1);
    student.setName("兮动人");
    student.setAge(24);
    student.setAddress("深圳市");
    student.setFlag(true);

    Student student2 = new Student();
    student2.setId(2);
    student2.setName("Mike");
    student2.setAge(25);
    student2.setAddress("北京市");
    student2.setFlag(false);

    Map<String,Student> map = new HashMap<String, Student>();
    map.put("s1",student);
    map.put("s2",student2);
    
    String jsonString = JSON.toJSONString(map);
    System.out.println(jsonString);
}

在这里插入图片描述

{
    "s1":{
        "address":"深圳市",
        "age":24,
        "flag":true,
        "id":1,
        "name":"兮动人"
    },
    "s2":{
        "address":"北京市",
        "age":25,
        "flag":false,
        "id":2,
        "name":"Mike"
    }
}

2. FashJson反序列化API

  • 反序列化:JSON 格式字符串,反序列化为 Java 对象

2.1 反序列化Java对象

  • 方法:JSON.parseObject
@Test
public void jsonToObject(){
   String jsonString = "{\"address\":\"深圳市\",\"age\":24,\"flag\":true,\"id\":1,\"name\":\"兮动人\"}";
   Student student = JSON.parseObject(jsonString, Student.class);
   System.out.println(student);
}
Student(id=1, name=兮动人, age=24, address=深圳市, flag=true)

2.2 反序列化List集合

  • 方法:JSON.parseArray
@Test
public void jsonToList(){
    String jsonString = "[{\"address\":\"深圳市\",\"age\":24,\"flag\":true,\"id\":1,\"name\":\"兮动人\"}," +
        "{\"address\":\"北京市\",\"age\":25,\"flag\":false,\"id\":2,\"name\":\"Mike\"}]";
    List<Student> list = JSON.parseArray(jsonString,Student.class);
    for (int i = 0; i < list.size(); i++) {
        Student student =  list.get(i);
        System.out.println(student);
    }
}
Student(id=1, name=兮动人, age=24, address=深圳市, flag=true)
Student(id=2, name=Mike, age=25, address=北京市, flag=false)

2.3 反序列化Map集合

  • 方法:JSON.parseObject
@Test
public void jsonToMap(){
    String jsonString = "{\"s1\":{\"address\":\"深圳市\",\"age\":24,\"flag\":true,\"id\":1,\"name\":\"兮动人\"}," +
        "\"s2\":{\"address\":\"北京市\",\"age\":25,\"flag\":false,\"id\":2,\"name\":\"Mike\"}}";
    Map<String,Student> parse = JSON.parseObject(jsonString,new TypeReference<Map<String,Student>>(){});

    for(String s : parse.keySet()){
        System.out.println(s + ":"+parse.get(s));
    }
}
s1:Student(id=1, name=兮动人, age=24, address=深圳市, flag=true)
s2:Student(id=2, name=Mike, age=25, address=北京市, flag=false)

3. SerializerFeature枚举

  • 该枚举支持序列化的一些特性数据定义

3.1 WriteMapNullValue

  • 枚举常量 WriteMapNullValue 序列化为 null 的字段
@Test
public void testSerializerFeature(){

    Student student = new Student();
    student.setId(1);
    student.setName("兮动人");
    student.setAge(24);
//        student.setAddress("深圳市");
    student.setFlag(true);
    
    String jsonString = JSON.toJSONString(student, SerializerFeature.WriteMapNullValue);
    System.out.println(jsonString);
}
{"address":null,"age":24,"flag":true,"id":1,"name":"兮动人"}

3.2 WriteNullStringAsEmpty

  • 枚举常量 WriteNullStringAsEmpty 字段为null,序列化为""
String jsonString = JSON.toJSONString(student, SerializerFeature.WriteNullStringAsEmpty);
{"address":"","age":24,"flag":true,"id":1,"name":"兮动人"}

3.3 WriteNullNumberAsZero

  • 枚举常量 WriteNullNumberAsZero 字段为null,序列化为0
@Test
public void testAsZero(){
    Student student = new Student();
    student.setId(1);
    student.setName("兮动人");
//        student.setAge(24);
    student.setAddress("深圳市");
    student.setFlag(true);

    String jsonString = JSON.toJSONString(student, SerializerFeature.WriteNullNumberAsZero);
    System.out.println(jsonString);
}
{"address":"深圳市","age":0,"flag":true,"id":1,"name":"兮动人"}

3.4 WriteNullBooleanAsFalse

  • 枚举常量 WriteNullBooleanAsFalse 字段值为null 输出false
@Test
public void testAsFalse(){
    Student student = new Student();
    student.setId(1);
    student.setName("兮动人");
    student.setAge(24);
    student.setAddress("深圳市");
//        student.setFlag(true);

    String jsonString = JSON.toJSONString(student, SerializerFeature.WriteNullBooleanAsFalse);
    System.out.println(jsonString);
}

在这里插入图片描述

3.5 WriteDateUseDateFormat

  • 枚举常量 WriteDateUseDateFormat 格式化日期格式

    • 没有加属性的情况下,序列化话,日期显示的是毫秒值
@Test
 public void testDateFormat(){
     Student student = new Student();
     student.setId(1);
     student.setName("兮动人");
     student.setAge(24);
     student.setAddress("深圳市");
     student.setFlag(true);
     student.setBirthDate(new Date());

     String jsonString = JSON.toJSONString(student);
     System.out.println(jsonString);
 }

在这里插入图片描述

  • 加上格式化日期后:
String jsonString = JSON.toJSONString(student, SerializerFeature.WriteDateUseDateFormat);

在这里插入图片描述

3.6 PrettyFormat

  • 也可以在后面都加上枚举常量 PrettyFormat格式化输出,一目了然
String jsonString = JSON.toJSONString(student,SerializerFeature.WriteDateUseDateFormat, 
SerializerFeature.PrettyFormat);

在这里插入图片描述

4. JSonField 注解

该注解作用于方法上,字段上和参数上,可在序列化和反序列化时进行特性功能定制。

1、 注解属性 : name 序列化后的名字

@Data
public class Student {

    private Integer id;

    @JSONField(name = "studentName")
    private String name;

    private Integer age;

    private String address;

    private boolean flag;

    private Date birthDate;

}
@Test
public void testName() {
    Student student = new Student();
    student.setId(1);
    student.setName("兮动人");
    student.setAge(24);
    student.setAddress("深圳市");
    student.setFlag(true);
    student.setBirthDate(new Date());

    String jsonString = JSON.toJSONString(student);
    System.out.println(jsonString);
}

在这里插入图片描述

2、注解属性 : ordinal序列化后字段的顺序,属性值越小,顺序越靠前

  • 可以看到上面序列化话默认的顺序是按照 a-z 字幕顺序来排序的
  • 给字段设置顺序的属性值
@JSONField(name = "studentName", ordinal = 1)
private String name;
@JSONField(ordinal = 2)
private Integer age;
  • 发现 值越小,就越靠前

在这里插入图片描述

3、注解属性 : format 指定序列化后的格式

@JSONField(format = "YYYY-MM-dd")
private Date birthDate;

在这里插入图片描述

4、注解属性 : serialize 指定是否序列化该字段,默认为 true

@JSONField(serialize = false)
private String address;
  • 可以发现并没有序列化 address 字段

在这里插入图片描述

5、注解属性 : deserialize 指定是否反序列化该字段,默认为 true

6、注解属性 : serialzeFeatures 指定序列化时的特性定义

  • 这个属性的用法和上面的 SerializerFeature枚举 用法是一致的

5. JSonType 注解

该注解作用于类上,对该类的字段进行序列化和反序列化时的特性功能定制。

1、注解属性 : includes 要被序列化的字段

@Data
@JSONType(includes = {"id", "name", "age"})
public class Person {
    private int id;
    private String name;
    private int age;
    private String address;
}
@Test
public void test() {
    Person person = new Person();
    person.setId(1);
    person.setName("兮动人");
    person.setAge(23);
    person.setAddress("北京市");

    String s = JSON.toJSONString(person);
    System.out.println(s);
}
  • 可以看到并没有序列化 address 字段、

在这里插入图片描述

2、注解属性 : orders 序列化后的顺序

@Data
@JSONType(includes = {"id", "name", "age", "address"}, orders = {"name", "age", "address", "id"})
public class Person {
    private int id;
    private String name;
    private int age;
    private String address;
}
@Test
public void test() {
    Person person = new Person();
    person.setId(1);
    person.setName("兮动人");
    person.setAge(23);
    person.setAddress("北京市");

    String s = JSON.toJSONString(person);
    System.out.println(s);
}

在这里插入图片描述

3、注解属性 : serialzeFeatures 序列化时的特性定义

  • serialzeFeatures 实现和上面案例上的枚举效果是一样的
目录
相关文章
|
2月前
|
存储 缓存 网络协议
如何使用CDN加速访问OSS存储的图片资源?
通过阿里云CDN加速OSS上的图片和视频资源,可显著提升访问速度、降低带宽成本。CDN将静态资源缓存至离用户最近的节点,减少加载时间,并提供图像处理、缓存优化等功能,提升用户体验。同时,CDN还支持访问数据分析,助力运营决策。本文详解如何通过CDN控制台配置OSS加速,包括添加域名、设置CNAME、配置缓存策略等步骤,帮助您快速实现资源加速。
|
Java 数据库连接 mybatis
mybatismybatisPlus Update操作返回值不是影响行数
mybatismybatisPlus Update操作返回值不是影响行数
1181 0
|
数据格式
Layui中table数据表格使用方法渲染 返回的数据不符合规范,正确的成功状态码应为:“code“: 0异常处理
Layui中table数据表格使用方法渲染 返回的数据不符合规范,正确的成功状态码应为:“code“: 0异常处理
1440 0
|
3月前
|
SQL Java 数据库连接
updateByPrimaryKeySelective()方法因字段为null导致的更新不成功问题解决办法
为了让这个解决方案更容易融入到现有系统中,其实现应该尽量简单且无缝,避免重复代码,并提高代码复用性。结合上述方法中提供的策略,应可以解决在使用 `updateByPrimaryKeySelective()`方法时因字段为null导致的更新不成功问题。请根据实际业务需求和上下文选择最合适的方案。这样的解决方案能够达到更佳的代码质量和维护性。
270 14
|
11月前
|
存储 JSON fastjson
再也不用心惊胆战地使用FastJSON了——序列化篇
本篇将主要介绍json序列化的详细流程。本文阅读的FastJSON源码版本为2.0.31。
3518 49
|
12月前
|
机器学习/深度学习 存储 弹性计算
ECS是什么?
ECS(Elastic Compute Service)是一种提供弹性和可伸缩的计算能力的服务,通常由云服务提供商如阿里云和华为云提供。它允许用户根据需要快速扩展或缩减计算资源,以满足不同业务场景的需求
3444 0
|
Java 应用服务中间件 Linux
JVM调优总结(一)之参数配置说明与实例
JVM调优总结(一)之参数配置说明与实例
1180 0
|
Java 应用服务中间件 Maven
从零到英雄:一步步构建你的首个 JSF 应用程序,揭开 JavaServer Faces 的神秘面纱
【8月更文挑战第31天】JavaServer Faces (JSF) 是一种强大的 Java EE 标准,用于构建企业级 Web 应用。它提供了丰富的组件库和声明式页面描述语言 Facelets,便于开发者快速开发功能完善且易于维护的 Web 应用。本文将指导你从零开始构建一个简单的 JSF 应用,包括环境搭建、依赖配置、Managed Bean 编写及 Facelets 页面设计。
263 0
|
缓存 UED
Cache-Control字段是什么
【8月更文挑战第18天】Cache-Control字段是什么
394 0
|
关系型数据库 MySQL
MySQL的between and 边界是什么?
【8月更文挑战第1天】MySQL的between and 边界是什么?
1169 0