Java-使用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对它们进行序列化,您将获得所需的结构。

最新更新