Java 到 Json 保留引用

标签 java json jackson

我一直在互联网上寻找一个好的 Java 到 Json 库,它可以保留对 java 对象中对象的引用。我一直在关注的两个库是:

  • jackson
  • Gson

这是我想要维护的一些简化代码:

public class SaveMe
{
    public User previous = null;
    public User next = null;
}

public class User
{
    public int id;
    public String name;
    public User(int id, String name)
    {
        this.id = id;
        this.name = name;
    }
}

采取类似:

SaveMe saveMe = new SaveMe();
User previousAndNext = new User();
saveMe.previous = previousAndNext;
saveMe.next = previousAndNext;

在本例中,我有一个 saveMe 对象,其中前一个和下一个对象指向同一对象。我想找到一种方法将对象转换为 Json,然后再次转换回来,同时保持 saveMe 对象上的 previousnext 指向同一个 User 对象。

我已经尝试使用 Gson 和 Jackson 进行此操作,但尚未找到正确执行此操作的方法。当我将 json 转换回 Java 对象时,该对象在我的 saveMe 对象中有两个 User 对象的副本,而不仅仅是一个引用。

编辑:

感谢@dnault 和@StaxMan 的回复。使用 @JsonIdentityInfo 的文档链接非常好且简单。 Gson 有没有办法做类似的事情?我对 Gson 比较熟悉,并且已经在我当前的代码中实现了它。我确信 Jackson 方式能够满足我的需求,但我只是想知道 Gson 中是否也有办法做到这一点。

最佳答案

Jackson 可以使用 @JsonIdentityInfo 注释来做到这一点;这是启用 id/引用跟踪所必需的,因为它有点昂贵,而且还因为有多种方法可以生成要使用的对象 id。

上面评论中给出的链接(http://wiki.fasterxml.com/JacksonFeatureObjectIdentity)应该有帮助;以及this entry .

关于Java 到 Json 保留引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20254334/

相关文章:

Jackson CsvMapper 只读取第一行

Java 2D 加权数据插值

Java 内联汇编传递变量

java - 如何将 JButton 放在 JLabel 上?

java - 我应该将 json 字符串解析为 json 对象还是直接操作字符串

javascript - javascript Codeigniter 中的 Json 对象

serialization - Jackson 序列化和反序列化对象时不使用双引号

java - 丰富 spring-data-rest 存储库上的行为

php - 上传时检查JSON文件

java - 将 csv 字符串转换为带有双引号键/值的 Map