web-dev-qa-db-ja.com

Jacksonの配列で始まるJSONファイルを逆シリアル化する方法は?

次のようなJsonファイルがあります。

[
    { "field":"val" },
....
]

私はJava単一のオブジェクトとそれらのコレクションを表すオブジェクトを持っています:

public class Objects{

    public Collection<List> myObject;
}

ObjectMapperを使用してJSONを逆シリアル化したいのですが。

ObjectMapper mapper = new ObjectMapper();
mapper.readValue(in, Objects.class);

しかし、私は得ます:

11-24 23:19:19.828: W/UpdateService(6084): org.codehaus.jackson.map.JsonMappingException: 
Can not deserialize instance of com.project.my.Objects out of START_ARRAY token
18
pixel

@dmonが答えたように、配列またはリスト型の受け渡しは機能します。

完全を期すために、コンテンツを1つずつ読みたい場合は、段階的なアプローチもあります。

Iterator<Objects> it = mapper.reader(Objects.class).readValues(in);
while (it.hasNext()) {
  Objects next = it.next();
  // ... process it
}

これは、オブジェクトの巨大なリストまたはシーケンスがある場合に役立ちます。 JSON配列を囲むか、スペースまたは改行で区切られたルートレベルの値のみを使用します。

0
StaxMan