java - 使用 Jackson 反序列化自引用对象

标签 java json jackson circular-dependency self-reference

我有一个看起来像这样的 JSON 字符串(简化版):

[
  { "id":1, "friends":[2] },
  { "id":2, "friends":[1,3] },
  { "id":3, "friends":[] }
]

好友内容是列表中其他用户的id。

是否可以通过使用 Jackson 的数据绑定(bind)以某种方式从 JSON 创建一个像下面这样的 Java 类,或者我是否需要一个中间步骤?

public class User {
  private long userid;
  private List<User> friends;
// ... getters/setters

感谢您的帮助。

最佳答案

没有完全注释的方法来执行此操作,因此您需要自定义 JsonSerializer/JsonDeserializer。 Jackson 1.9 添加 two new features这可能有帮助:

  • ValueInstantiators,因此您可以添加反序列化器的构造函数,以将基本整数转换为 POJO
  • 值注入(inject),以便您可以传递额外的上下文对象(您需要找到已反序列化器对象的 ID,然后从整数映射到实例)

但是我并不是 100% 确定如何针对特定用例结合这两个功能...

关于java - 使用 Jackson 反序列化自引用对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7771407/

相关文章:

java - 使用 LocalDateTime 字段将 JSON 反序列化为对象

java - Struts 2 选择标签默认值

json - 新手Go,试图梳理如何处理JSON

java - 使用Spring依赖注入(inject)的观察者模式实现

android - 解析来自 php web 服务的 json 对象响应

java - 如何将 JSONObject 中的数据提取到 EditText 字段

java - ZonedDateTime 的 Jackson 反序列化问题

java - 如何通过 Jackson 传递原始 JSON?

java - GIF 图像在我的应用程序中不起作用

java - Android 应用程序中的周期性操作