相关疑难解决方法(0)

Jackson JsonTypeInfo.As.EXTERNAL_PROPERTY无法正常工作

我正在使用Jackson来解析我无法控制的JSON.JSON看起来像这样:

{
    "status":"0"
    "type":"type1"
    "info": {
       // additional fields
    }
}
Run Code Online (Sandbox Code Playgroud)

我的班级看起来像这样

public class Response {
    private String status;
    private String type;
    private Info info
}
Run Code Online (Sandbox Code Playgroud)

我使用的Info的子类取决于type属性,所以我对info的映射是

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXTERNAL_PROPERTY, property = "type")
@JsonSubTypes(value = {
        @JsonSubTypes.Type(value = Type1Info.class, name = "type1"),
        @JsonSubTypes.Type(value = Type2Info.class, name = "type2") })
public abstract class Info {
    // some fields
}
Run Code Online (Sandbox Code Playgroud)

据我所知,当区别元素与必须被转换的元素处于同一级别时,这是使用类型信息的正确方法.但这不起作用,我总是得到同样的错误:

com.fasterxml.jackson.databind.JsonMappingException:意外的标记(END_OBJECT),期望的FIELD_NAME:缺少属性'type',包含类型id

如果我将EXTERNAL_PROPERTY更改为PROPERTY,我仍会得到相同的错误.我对EXTERNAL_PROPERTY的理解是错误的吗?

polymorphism json jackson

24
推荐指数
1
解决办法
1万
查看次数

Jackson Exception 的序列化和反序列化

JSON 嵌套类数据绑定 作为答案,当我序列化和反序列化容器时,我得到了这个异常:

Caused by: org.codehaus.jackson.map.JsonMappingException: Can not find a Value deserializer for abstract type [simple type, class com.xiaonei.wap.ps.model.Container]
at org.codehaus.jackson.map.deser.StdDeserializerProvider._handleUnknownValueDeserializer(StdDeserializerProvider.java:321)
at org.codehaus.jackson.map.deser.StdDeserializerProvider.findValueDeserializer(StdDeserializerProvider.java:116)
at org.codehaus.jackson.map.deser.StdDeserializer.findDeserializer(StdDeserializer.java:260)
at
Run Code Online (Sandbox Code Playgroud)

java json jackson

5
推荐指数
1
解决办法
1319
查看次数

反序列化时使用父对象的属性来确定子类?

children: [
      {
          o kind: "t3"
            data: {                 // ExampleNodeT3 class should be used for kind == t3
                + t3var1: "val1"
                + t3var2: true
            }
      }
      {
          o kind: "t4"                
            data: {                 // ExampleNodeT4 class should be used for kind == t4
                + t4var1: false
                + t4var2: 2346
            }
      }
] ... etc.


@JsonTypeInfo(use=Id.NAME, property="kind")
@JsonSubTypes({
@Type(value=ExampleNodeT3.class, name="t3"),
@Type(value=ExampleNodeT4.class, name="t4")})
public abstract class ExampleNode {
...
public void setData(ExampleNode data) {
    this.data = data;
}
Run Code Online (Sandbox Code Playgroud)

当尝试使用 Jackson 反序列化时,在创建 ExampleNode 数据时 …

java polymorphism json jackson

2
推荐指数
1
解决办法
4068
查看次数

如何反序列化包含不同类型对象的json数组

这是一个json片段,其中包含一个数组(图标),可以包含两种不同类型的对象(应用程序和文件夹)

    {
        "icons": [{
            "application": {
                "displayName": "Facebook",
                "bundleId": "com.facebook.com"
            }
        }, {
            "folder": {
                "some": "value",
                "num": 3
            }
        }]
    }
Run Code Online (Sandbox Code Playgroud)

我如何创建java POJO的这种json建模然后反序列化?

我提到了这个问题.但是我不能改变json我要在那里包含一个'type',然后使用继承来处理两个不同对象的POJO.

java json jackson

0
推荐指数
1
解决办法
1368
查看次数

标签 统计

jackson ×4

json ×4

java ×3

polymorphism ×2