Fastjson序列化全解析

一、Fastjson序列化方式

Fastjson是一种高效的JSON解析器、操作器,它可以将Java对象序列化为JSON字符串,并将JSON字符串反序列化为Java对象。通常情况下,Fastjson序列化的方式有三种:

1、使用JSON.toJSONString()方法将Java对象序列化为JSON字符串。

2、使用JSONObject.toJSONString()方法将Java对象序列化为JSON字符串。

3、使用JSON.parseObject()方法将JSON字符串反序列化为Java对象。

其中,JSON.toJSONString()方法和JSONObject.toJSONString()方法的区别在于,JSON.toJSONString()方法序列化后的JSON字符串不带“{}”,而JSONObject.toJSONString()方法序列化后的JSON字符串默认带上“{}”。

// JSON.toJSONString()方法示例
User user = new User("John", 18);
String jsonStr = JSON.toJSONString(user);
System.out.println(jsonStr);

// JSONObject.toJSONString()方法示例
JSONObject jsonObj = (JSONObject) JSON.toJSON(user);
String jsonStr = jsonObj.toJSONString();
System.out.println(jsonStr);

// JSON.parseObject()方法示例
String jsonStr = "{\"name\":\"John\",\"age\":18}";
User user = JSON.parseObject(jsonStr, User.class);
System.out.println(user.getName());

二、Fastjson反序列化泛型

当需要将JSON字符串反序列化为泛型对象时,Fastjson提供了以下两种方式:

1、使用TypeReference类实现泛型反序列化。

2、使用JSONArray.parseObject()方法实现泛型反序列化。

// TypeReference类示例
String jsonStr = "[{\"name\":\"John\",\"age\":18},{\"name\":\"Mike\",\"age\":20}]";
List userList = JSON.parseObject(jsonStr, new TypeReference<List>(){});
System.out.println(userList.get(0).getName());

// JSONArray.parseObject()方法示例
String jsonStr = "[{\"name\":\"John\",\"age\":18},{\"name\":\"Mike\",\"age\":20}]";
Type type = new TypeReference<List>(){}.getType();
List userList = JSONArray.parseObject(jsonStr, type);
System.out.println(userList.get(0).getName());

三、Fastjson序列化对象

当需要将Java对象序列化为JSON字符串时,Fastjson支持对对象的各种操作,包括属性名的修改、属性值的过滤、属性值的格式化等。以下是一些常用的示例:

1、修改对象属性名

User user = new User("John", 18);
String jsonStr = JSON.toJSONString(user, SerializerFeature.BeanToArray);
System.out.println(jsonStr); // ["John",18]

2、忽略对象属性

User user = new User("John", 18);
String jsonStr = JSON.toJSONString(user, SerializerFeature.IgnoreNonFieldGetter);
System.out.println(jsonStr); // {"age":18,"name":"John"}

3、设置对象属性值为null

User user = new User("John", 18);
user.setName(null);
String jsonStr = JSON.toJSONString(user, SerializerFeature.WriteMapNullValue);
System.out.println(jsonStr); // {"age":18,"name":null}

四、Fastjson序列化出额外字段

当需要将Java对象序列化为JSON字符串时,Fastjson支持在序列化时添加额外的字段。以下是一个示例:

User user = new User("John", 18);
JSONObject jsonObj = (JSONObject) JSON.toJSON(user);
jsonObj.put("gender", "male");
String jsonStr = jsonObj.toJSONString();
System.out.println(jsonStr); // {"age":18,"gender":"male","name":"John"}

五、Fastjson序列化别名

当需要将Java对象序列化为JSON字符串时,Fastjson支持修改属性名为别名。以下是一个示例:

public class User {
    @JSONField(name = "userName")
    private String name;

    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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;
    }
}

User user = new User("John", 18);
String jsonStr = JSON.toJSONString(user);
System.out.println(jsonStr); // {"age":18,"userName":"John"}

六、Fastjson序列化主键成了数组

当需要将Java对象序列化为JSON字符串时,Fastjson支持将主键序列化成数组。以下是一个示例:

public class User {
    private String[] id;

    private String name;

    public User(String[] id, String name) {
        this.id = id;
        this.name = name;
    }

    public String[] getId() {
        return id;
    }

    public void setId(String[] id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

User user = new User(new String[]{"001", "002"}, "John");
String jsonStr = JSON.toJSONString(user);
System.out.println(jsonStr); // {"id":["001","002"],"name":"John"}

七、Fastjson序列化基本类型

当需要将基本类型序列化为JSON字符串时,Fastjson支持自动转换。以下是一个示例:

int num = 123;
String jsonStr = JSON.toJSONString(num);
System.out.println(jsonStr); // 123

八、Fastjson序列化对象数组

当需要将对象数组序列化为JSON字符串时,Fastjson可以通过List集合实现。以下是一个示例:

public class User {
    private String name;

    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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;
    }
}

List userList = new ArrayList();
userList.add(new User("John", 18));
userList.add(new User("Mike", 20));
String jsonStr = JSON.toJSONString(userList);
System.out.println(jsonStr); // [{"age":18,"name":"John"},{"age":20,"name":"Mike"}]

九、Fastjson序列化某个字段不同类型

当需要将Java对象序列化为JSON字符串时,如果某个字段需要序列化为不同的类型,Fastjson提供了以下方法解决:

1、将字段序列化为字符串。

2、使用SerializeFilter类实现字段序列化。

public class User {
    private String name;

    @JSONField(serializeUsing = AgeSerializer.class)
    private int age;

    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }

    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 class AgeSerializer implements ObjectSerializer {
    @Override
    public void write(JSONSerializer serializer, Object object, Object fieldName, Type fieldType, int features) throws IOException {
        Integer value = (Integer) object;
        if (value >= 18) {
            serializer.write(Adult.ADU);
        } else {
            serializer.write(Child.CHI);
        }
    }

    public enum Adult {ADU; }
    public enum Child {CHI; }
}

User user = new User("John", 18);
String jsonStr = JSON.toJSONString(user);
System.out.println(jsonStr); // {"age":{"name":"ADU"},"name":"John"}

以上就是Fastjson序列化的全解析,通过以上示例,我们可以更好地理解Fastjson的序列化方式和操作方法。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/244597.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-12 13:02
下一篇 2024-12-12 13:03

相关推荐

  • 金额选择性序列化

    本文将从多个方面对金额选择性序列化进行详细阐述,包括其定义、使用场景、实现方法等。 一、定义 金额选择性序列化指根据传入的金额值,选择是否进行序列化,以达到减少数据传输的目的。在实…

    编程 2025-04-29
  • 理解Java反序列化(Java Deserialization Vulnerability)

    本文将从多个方面深入探讨Java反序列化漏洞,对于笔者所总结的经验和教训,以及掌握Java反序列化的设计模式、最佳实践和防范措施。 一、Java反序列化漏洞概述 Java反序列化漏…

    编程 2025-04-28
  • 深度解析FastJson

    一、FastJson概述 FastJson是一个Java语言编写的高性能JSON解析器和生成器,由阿里巴巴公司开发和维护,已经成为了Java开发中广泛使用的JSON解析工具之一。F…

    编程 2025-04-13
  • Java Json序列化详解

    一、Json 简介 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集,采用完全独立于编程语言的文本格…

    编程 2025-04-12
  • Fastjson使用详解

    一、什么是Fastjson? Fastjson是一种Java语言编写的高性能JSON处理器,它提供了简单的API来解析、生成、转换和打印JSON。 Fastjson具有以下优点: …

    编程 2025-04-12
  • Java序列化和反序列化

    一、简介 Java序列化是将对象转换为字节序列的过程,以便在网络上传输或保存到文件中。反序列化是将字节序列转换回对象的过程。它们是Java中非常重要的特性,可以帮助我们方便地将对象…

    编程 2025-03-12
  • 深入理解fastjson

    一、 简介 Fastjson是一个Java语言编写的高性能功能完善的JSON库。它主要面向Java开发领域,能够将Java对象序列化为JSON对象,同时也能将JSON对象反序列化为…

    编程 2025-02-24
  • 探究newtonsoft.json反序列化

    一、JSON介绍 JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于阅读和编写,同时也易于解析和生成。它基于JavaScript语言的…

    编程 2025-02-05
  • Jackson反序列化漏洞详细解析

    一、漏洞简介 Jackson是一个广泛使用的Java库,用于将JSON数据与Java对象相互转换。由于其高效且易于使用,Jackson已成为许多Java应用程序的首选序列化和反序列…

    编程 2025-02-05
  • fastjson漏洞利用详解

    一、fastjson漏洞利用工具 fastjson漏洞利用是网络攻击中的一种利用方式,为了方便攻击者,已经有很多的工具可供选择,例如redr2,xray,whatweb等。这些工具…

    编程 2025-02-05

发表回复

登录后才能评论