Jacksonを使用してJSONデータをJavaオブジェクト、正確にはオブジェクトのリスト)に変換しようとしていますが、次のエラーが発生します。
org.codehaus.jackson.map.JsonMappingException:START_ARRAYトークンからentitylayer.Detailのインスタンスを逆シリアル化できません
これはコードです:
ObjectMapper mapper = new ObjectMapper();
List<Detail> lcd = (List<Detail>) mapper.readValue(ld, Detail.class);
ldはJson形式のリストです。これは、 jacksonチュートリアル で私を混乱させる部分です。 new File( "user.json")は何を表していますか?それが変換したいjson形式の文字列だと思ったので、ldを使用しました。
あなたがそれで私を助けてくれることを願っています
リンクしたチュートリアルから(他のコレクションも同じように機能します):
したがって、データをマップにバインドする場合は、次を使用する必要があります。
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { });
typeReferenceは、ジェネリック型の定義を渡すためにのみ必要です(この場合は任意の内部クラスを介して):重要な部分は、バインドする型を定義する>です。
これを行わない場合(そしてMap.classを渡すだけの場合)、上記で説明したように、呼び出しはMap(つまり「型指定されていない」Map)へのバインドと同等です。
あなたがスプーンで与えられることを主張するならば:
List<Detail> lcd = mapper.readValue(ld, new TypeReference<List<Detail>>() {});
別の戦略として、型を簡単に指定できるため、配列の処理が少し便利です。したがって、代わりにこれを行うこともできます:
Detail[] details = mapper.readValue(ld, Detail[].class);
少なくともジャクソンを扱うときは、配列はしばしば十分に活用されていません。結果をあまり変更する必要がない限り、ジェネリックを使用せずに型が適切に含まれているため、非常に便利に使用できます(その結果、型の安全性は強力です。コンパイラの綿毛だけではありません)。
または、JSONを自分で解析し、作成したいPOJOを作成します。 JSONをJAXBに変換するためにそれを行いました。
http://wiki.fasterxml.com/JacksonInFiveMinutes の「ストリーミングAPIの例」セクションを参照してください。
思ったより簡単です。
このエラーが発生した場合は、最初に、変換しようとしているJSON文字列が適切なJSON文字列であるかどうかを確認してください。コードをローカルテストするために独自のJSON文字列を作成しようとすると、このエラーが発生します。