1. 程式人生 > 實用技巧 >fastjson中$ref迴圈引用

fastjson中$ref迴圈引用

問題描述:

當我們使用fastjson工具包的方法轉換成字串時,我們發現轉換後的字串不正確,出現了$ref,如圖

為啥會出現$ref:

這是因為我們物件出現了重複引用,待轉換的物件有不同內部變數指向了同一個物件。

public class User {
    private String userName;

    public User(String userName) {
        this.userName = userName;
    }
    // get與set方法省略
}

public class Order {
    private User userA;
    
private User userB; public Order(User userA, User userB) { super(); this.userA = userA; this.userB = userB; } // get與set方法省略 }

JSON字串輸出:

public class FastJsonTest {
    public static void main(String[] args) {
        User user = new User("張三");
        Order order1 
= new Order(user, user); System.out.println(JSON.toJSONString(order1)); } }

輸出:

{"userA":{"userName":"張三"},"userB":{"$ref":"$.userA"}}

解決方式:

我們可以加上序列化引數:SerializerFeature.DisableCircularReferenceDetect

public class FastJsonTest {
    public static void main(String[] args) {
        User user 
= new User("張三"); Order order1 = new Order(user, user); System.out.println(JSON.toJSONString(order1, SerializerFeature.DisableCircularReferenceDetect)); } }

輸出:

{"userA":{"userName":"張三"},"userB":{"userName":"張三"}}

思考:

如果出現了$ref一定我們物件構造上問題,我們更應該規範我們開發