数组上的@JsonIdentityInfo

时间:2012-08-17 16:36:24

标签: json jackson deserialization

我刚刚升级到Jackson 2.0.5并发现了这个名为@JsonIdentityInfo的新属性,它允许您定义一次对象,但是让序列化程序创建对该单个对象的引用,而不会在每次看到它时创建重复项。实际上相当不错。 http://wiki.fasterxml.com/JacksonFeatureObjectIdentity

该文档指出此功能目前尚不支持数组。我想知道是否有人知道其他方法吗?我有一段JSON,可能看起来像这样:

{
    "people":[ 
       { "@id" = 1, "name"="bill"},
       { "@id" = 2, "name"="joe"}
    ],
    "friends": [1,2]

}

我希望让“朋友”充满“人”对象,就像“人”一样。有谁知道这样做的方法?

2 个答案:

答案 0 :(得分:1)

您可以做的是使用仅包含数组或List的包装器POJO。 POJO可以正常使用身份处理。它增加了一个额外的级别,但应该很好地工作。

如果您希望看到对列表/数组类型的支持,请务必在Github处提交RFE。虽然实现起来非常重要,但可能只需要相当多的工作(这就是为什么原始实现专注于表达为JSON对象的东西)。

答案 1 :(得分:1)

您可以使用JSOG JS库https://github.com/jsog/jsog执行此操作,但您需要序列化数据,如:

{
"people":[ 
   { "@id" = 1, "name"="bill"},
   { "@id" = 2, "name"="joe"}
],
"friends": [ {@ref = 1}, {@ref = 2}]

}

或修改JSOG库。