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/zh-hk/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

發表回復

登錄後才能評論