当前位置: 首页 > 知识库问答 >
问题:

如何将@JSONIdentityInfo与循环引用一起使用?

商宝
2023-03-14
public class A
{
    private B b;
    // constructor(s) and getter/setter omitted
}
public class B
{
    private A a;
    // see above
}
@Test
public void testJacksonJr() throws Exception
{
    A a = new A();
    B b = new B(a);
    a.setB(b);
    String s = JSON.std.asString(a);// throws StackOverflowError
    Assert.assertEquals("{\"@id\":1,\"b\":{\"@id\":2,\"a\":1}}", s);
}

我希望我可以序列化(稍后反序列化)A为如下所示:(但对JSON不太确定)

{
    "b": {
        "@id": 1,
        "a": {
            "@id": 2,
            "b": 1
        }
    }
}

我怎么能那样做?

共有1个答案

司马作人
2023-03-14

看起来jackson-jr有杰克逊的一些特征。@JsonIdentityInfo一定没有被选中。

如果您可以使用完整的Jackson库,只需使用标准的ObjectMapper和您在问题中建议的@JSONIdentityInfo注释,并序列化您的对象。例如:

@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
public class A {/* all that good stuff */}

@JsonIdentityInfo(generator=ObjectIdGenerators.IntSequenceGenerator.class, property="@id")
public class B {/* all that good stuff */}

后来呢

A a = new A();
B b = new B(a);
a.setB(b);
ObjectMapper mapper = new ObjectMapper();
System.out.println(mapper.writeValueAsString(a));
{
    "@id": 1,
    "b": {
        "@id": 2,
        "a": 1
    }
}
 类似资料:
  • 问题内容: 我试图描述使用@JsonIdentityInfo杰克逊2 这里。 为了进行测试,我创建了以下两个类: 当然,幼稚的方法会失败: 添加到A类和/或B类也不起作用。 我希望我可以序列化(然后反序列化)为这样的东西:(尽管对JSON不太确定) 我怎样才能做到这一点? 问题答案: 似乎jackson-jr具有Jackson功能的一部分。一定没有切入。 如果可以使用完整的Jackson库,则只需

  • 问题内容: 根据我的理解,如果没有其他“指向”该对象的内容,则Java中的垃圾回收会清除某些对象。 我的问题是,如果我们有这样的事情怎么办: 和应该被垃圾回收,但是它们都被其他对象引用。 Java垃圾回收如何处理呢?(或者仅仅是内存消耗?) 问题答案: 如果无法通过从垃圾回收根开始的链访问对象,Java的GC会将其视为“垃圾”,因此将收集这些对象。即使对象可能指向彼此以形成一个循环,但如果将它们与

  • 问题内容: 我试图了解为什么以下promise设置不起作用。 (注意:我已经使用async.map解决了这个问题。但是,我想了解为什么我的以下尝试不起作用。) 正确的行为应该是:bFunc应该运行所需的时间,以便fs读取所有图像文件(下面的bFunc运行两次),然后cFunc控制台打印“结束”。 谢谢! 尝试1:它在cFunc()处运行和停止。 尝试2:在这种情况下,我使用了for循环,但执行顺序

  • 我在Ubuntu 14.04中安装了phpbrew以使用PHP5.4。它工作得很好,但当我尝试使用composer时除外,composer会忽略phpbrew并安装与PHP5.5相关的依赖项。 有没有办法强制composer与phpbrew config兼容?我试图在我的作曲家中添加:php:“5.4”。json,但是它说这个要求在我的php版本中是不可能的。

  • 我是Micronaut框架的新手,我正在尝试使用entitymanager创建我的存储库。我这样创建了我的存储库 我使用这个类实现接口并注入entitymanager 问题是我一直有这个错误: PS:我已经启用了注释处理

  • 我正在尝试将composer与我的WampServer一起使用。 我所有文件的路径都是,但当我运行composer时,它会将供应商文件和其他东西安装到其他地方。 我甚至不知道我的项目在哪里,我也不能改变我的项目在哪里的路径。我已经尝试了所有的方法,但它似乎仍然没有在我的项目文件夹中安装供应商文件。