簡體   English   中英

Java - 使用 Jackon 規范化和序列化嵌套樹結構

[英]Java - Normalize and serialize a nested tree structure with Jackon

所以我有一個雙向圖,看起來有點像下面這樣:

class Node {
    private String name
    private Node[] next;
    private Node[] previous;
    // ...
}

當我使用 Jackson 和以下注釋對其進行序列化時: JsonIdentityInfo它工作得很好,我得到如下內容:

{
  "@id": 1,
  "name": "node1",
  "next": [
    {
       "@id": 2,
       "name": "node2",
       "next": [
         {
            "@id": 3,
            "name": "node3",
            "next": [],
            "previous": [2]
         }   
       ],
       "previous": [1]
    }
  ],
  "previous": []
}

它序列化嵌套結構,但通過在第一次遇到節點時定義節點然后將其 id 用於所有其他引用來避免循環遞歸。

這很好,但我想知道是否有可能改為獲得類似以下的內容:

{
    "nodes": [
        {
            "@id": 1,
            "name": "node1",
            "next": [2],
            "previous": []
        },
        {
            "@id": 2,
            "name": "node2",
            "next": [3],
            "previous": [1]
        },
        {
            "@id": 3,
            "name": "node3",
            "next": [],
            "previous": [2]
        }
    ]
}

完全移除嵌套並且每次都使用節點 id 的地方。

使用 Jackson 是否可以輕松/快速地實現這一目標? 因此我不需要定義一個完整的自定義序列化器/反序列化器

首先,您需要添加傑克遜的注釋:

class Node {
    private String name
    @JsonIdentityReference(alwaysAsId = true)
    private Node[] next;
    @JsonIdentityReference(alwaysAsId = true)
    private Node[] previous;
    // ...
}

然后加載/查詢所有節點作為列表並使用 Jackson 序列化它們,您將獲得所需的結構。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM