用杰克逊解析一个对象列表

时间:2014-06-19 11:20:46

标签: java json jackson gson

我想用Jackson解析一个对象列表。有了Gson,我可以轻松地做到这一点:

List<MyType> list = new Gson().fromJson(input, Types.listOf(MyType.class));

对杰克逊来说,似乎更难:

List<MyType> list = new ObjectMapper().readValue(input, /* What to put here? */);

代码需要适用于任何类型的列表(如Gson那样),因此我不能只创建一个包含MyType列表的类型并将其传入。

我尝试使用new TypeLiteral<List<MyType>>(){},但它只适用于单一类型。如果我将类型传递给方法,它就不再起作用了:

public <T> List<T> parse(Class<T> myType) {
    // returns a List<Map<?,?>> instead of List<T>
    return new ObjectMapper().readValue(input, new TypeLiteral<List<T>>(){});
}

我如何与杰克逊一起做这件事?

2 个答案:

答案 0 :(得分:0)

更容易

MyType myType = new ObjectMapper().readValue(input, new TypeReference<List<MyType>>() {});

更新了答案。

答案 1 :(得分:0)

我在同一时间找到了解决方案。显然,杰克逊提供了自己的解决方法:

List<MyType> list = new ObjectMapper().readValue(input, CollectionType.construct(List.class, SimpleType.construct(MyType.class));