【问题标题】:Parsing a list of objects with Jackson使用 Jackson 解析对象列表
【发布时间】:2014-06-19 11:20:45
【问题描述】:

我想使用 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&lt;List&lt;MyType&gt;&gt;(){},它有效,但仅适用于单一类型。如果我将类型传递给方法,它就不再起作用了:

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>>(){});
}

我该如何处理杰克逊?

【问题讨论】:

    标签: java json jackson gson


    【解决方案1】:

    更简单

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

    更新答案。

    【讨论】:

    • 不,输入包含一个列表 MyType,而不是单个对象。
    【解决方案2】:

    与此同时,我已经找到了解决方案。显然,Jackson 提供了自己的解决方法:

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

    【讨论】:

      猜你喜欢
      • 2015-09-05
      • 1970-01-01
      • 2014-12-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-02
      • 1970-01-01
      相关资源
      最近更新 更多