首页 > 解决方案 > 使用 Jackson 将 JSON 与包装在字符串中的 JSON 反序列化

问题描述

我收到 JSON 和字符串包装的 JSON 的混合。例如:

{
  "shapes": [
    {
      "type": "1",
      "shape": "{\"w\":3,\"h\":6}"
    },
    {
      "type": "2",
      "shape": "{\"radius\":5}"
    }
  ]
}

我想用不同的对象类型反序列化它。

abstract class Shape {
}

@Data
class Rectangle extends Shape {
    private int w;
    private int h;
}

@Data
class Circle extends Shape {
    private int radius;
}

@Data
class NodeParent {

    private Integer type;

    @JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type")
    @JsonSubTypes({
            @JsonSubTypes.Type(value = Rectangle.class, name = "1"),
            @JsonSubTypes.Type(value = Circle.class, name = "2")
    })
    private Shape shape;
}

@Data
class Root {

    private List<NodeParent> shapes;

}

这种方法适用于普通 JSON(没有字符串包装)

但是因为我的有效载荷失败了,因为它在“形状”中看到了一个字符串。我可以为此使用自定义反序列化器。但是我必须在那里映射所有类型。我更喜欢使用注释。

这可以做到吗?

标签: javajsonjackson

解决方案


推荐阅读