使用杰克逊映射未命名的数组

mar*_*ers 2 java twitter json jackson

在未指定游标的情况下点击twitter friends / ids API端点将返回以下JSON响应:

["243439460","13334762", "14654522"]

但是,当指定游标时,您会得到记录的格式:

{"next_cursor":0,"previous_cursor":0,"ids":["243439460","13334762","14654522"]}

使用Jackson反序列化第二个响应很容易使用

@JsonIgnoreProperties(ignoreUnknown = true)
public class FriendIds {
private List<String> ids;

public List<String> getIds() { return ids; }

public void setIds(List<String> ids) { this.ids = ids; }
}
Run Code Online (Sandbox Code Playgroud)

FriendIds friendIds = new ObjectMapper().readValue(jsonStr, FriendIds.class);

但是,我还没有找到类似的方法来反序列化FriendIds使用Jackson 的第一个响应。关于如何做到这一点的任何想法?

Sta*_*Man 5

首先将它们映射到ID列表怎么样:

List<String> ids = mapper.readValue(json, List.class); // works because String happens to be 'natural' type for JSON Strings
Run Code Online (Sandbox Code Playgroud)

然后只是构造包装对象?

杰克逊没有真正的方法知道要使用JSON数组来构造POJO,其中的一个字段将包含列表的内容,除非编写自定义反序列化器。如果您想这样做,那是有可能的。这实际上可以支持这两种情况。但是需要一些思考,对于JSON对象使用一种方法(默认POJO deser),对JSON数组使用另一种方法。因此,在Jackson之外进行此操作可能是最简单的。