我有一个看起来像这样的JSON结构:
{"data": [{"mykey": "someval"}, {"mykey": "someotherval"}], "foo": "bar"}
Run Code Online (Sandbox Code Playgroud)
我也有
public MyClass {
public String mykey;
}
Run Code Online (Sandbox Code Playgroud)
现在,我想将"data"JSON 的内容反序列化为List<MyClass>使用Jackson,因此我有以下代码:
ObjectMapper mapper = new ObjectMapper();
List<MyClass> l = (List<MyClass>) mapper.readerFor(new TypeReference<List<MyClass>>(){}).
withRootName("data").readValue(myJSONString);
Run Code Online (Sandbox Code Playgroud)
但这给了我一个例外:
com.fasterxml.jackson.databind.JsonMappingException: Unexpected token (FIELD_NAME),
expected END_OBJECT: Current token not END_OBJECT (to match wrapper object with root name
'data'), but FIELD_NAME
Run Code Online (Sandbox Code Playgroud)
有人知道我需要做些什么来解析吗?
我对杰克逊有以下设置:
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME,
include = JsonTypeInfo.As.PROPERTY,
property = "type")
@JsonSubTypes({
@Type(value = Sub1.class, name = "sub1"),
@Type(value = Sub2.class, name = "sub2")
})
abstract class BaseClass {
private String type;
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
}
Run Code Online (Sandbox Code Playgroud)
例如,Sub1 看起来像这样:
public class Sub1 extends BaseClass {
String other;
public String getOther() {
return other;
}
public void setOther(String o) {
other = o;
}
}
Run Code Online (Sandbox Code Playgroud)
该设置基本上是为了允许解析包含不同类型嵌入元素的 json 文档。解析有效,但是当我想写出 Sub1 实例时,奇怪的是,“type”键被写入生成的 …