我有一个看起来像这样的JSON结构:
List<MyClass>
我也有
ObjectMapper mapper = new ObjectMapper();
List<MyClass> l = (List<MyClass>) mapper.readerFor(new TypeReference<List<MyClass>>(){}).
withRootName("data").readValue(myJSONString);
现在我想使用Jackson将我的JSON 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
的内容反序列化为{{1}},所以我有这段代码:
{{1}}
然而,这给了我一个例外:
{{1}}
任何人都知道我需要做些什么来解析它?
答案 0 :(得分:3)
<强>更新强>
List<MyClass> l = (List<MyClass>) mapper.readValue(mapper.readTree(myJSONString).findPath("data").toString(),
new TypeReference<List<MyClass>>(){});
这一行将检索您要查找的列表。您尝试执行的操作的问题是,您尝试反序列化data
构成JSON的情况,如
{"data":[{"mykey": "someval"}, {"mykey": "someotherval"}]}
但是你的JSON有其他值导致了这个问题。上面的代码使用Jackson JSON树解析器隔离data
数组,然后将其取消列表到列表中。
初步回答
拥有一个根对象,以便您可以捕获该对象中的列表。
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonPropertyOrder({
"data"
})
public class Root {
@JsonProperty("data")
private List<MyClass> data = null;
@JsonProperty("data")
public List<MyClass> getData() {
return data;
}
@JsonProperty("data")
public void setData(List<MyClass> data) {
this.data = data;
}
}
现在使用objectMapper反序列化到此对象。
Root root = mapper.readValue(myJSONString,Root.class);
让我知道它是如何运作的。