2012-03-30 23 views
0

私はHJacksonを使ってJSONをオブジェクトに変換できることを知っています。以下はそれを行うためのコードスニペットです。JSONを複数のオブジェクトに変換します。 Jacksonを使用する

JsonFactory jsonFactory = new JsonFactory(); 
    ObjectMapper mapper = new ObjectMapper(jsonFactory); 
    DTO1 user = mapper.readValue(new File("c:\\oneFile.json"), 
       DTO1.class); 

私の条件は、JSONを複数のオブジェクトに変換することです。私の場合は、DTO1、DTO2 ....などの複数のオブジェクトに、可能であれば文字列変数にも渡します。

ジャクソンにこの操作を実行するAPIはありますか? これは、対応するDTO(オブジェクト)に手動で選択して保存する方法です。

よろしく http://wiki.fasterxml.com/JacksonInFiveMinutesからカラン

答えて

4

(だけでなく、ジャクソンにTypeFactory見1.3+):

データのPOJOへの結合に加えてジェネリック

と結合し、 「シンプルな」型の場合は、汎用型(型付けされた)コンテナへのバインディングのものが1つあります。このケースでは、いわゆるタイプ消去(Javaがやや後方互換性のある方法でジェネリックを実装するために使用される)のために特殊な処理が必要です。これはCollection.class(コンパイルしない)のようなものを使用できないようにします。

あなたは地図にデータをバインドしたいのであれば、あなたが使用する必要があります:

TypeReferenceのみ(この場合はanynomous内部クラス経由)ジェネリック型定義を渡すために必要とされている
Map<String,User> result = mapper.readValue(src, new TypeReference<Map<String,User>>() { }); 

:重要な部分is>は、バインドする型を定義します。

これを実行せずにMap.classを渡すだけであれば、上で説明したように、Mapへのバインド(つまり、型指定されていないマップ)と同じです。


あなたは多型のデシリアライズを意味する場合は、仕事のための適切なオブジェクトを選んでマッパーを支援するためにジャクソンのアノテーションを使って説明し、このリンクhttp://programmerbruce.blogspot.com/2011/05/deserialize-json-with-jackson-into.htmlを確認してください。


私は単純にJSON文字列を取り、常にのDTO(または何でもそれはに変換することができます)のリストに変換する(私はそれを向上させることができると確信している)は、本日、これを書きました。これは任意の型で呼び出すことができ、単一のインスタンス、List、またはあなたが望むものを返すように変更できます。 OBJECT_MAPPERは静的なObjectMapper変数です。

public static <T> List<T> getFromJSONCollection(String jsonString, final Class<T> type) throws IOException { 
    try { 
     return OBJECT_MAPPER.readValue(jsonString, TypeFactory.defaultInstance().constructCollectionType(ArrayList.class, type)); 
    } catch (JsonMappingException e) { 
     return getFromJSON(jsonString, type); 
    } 
    } 

    public static <T> List<T> getFromJSON(final String jsonString, final Class<T> type) throws IOException { 
    return new ArrayList<T>() {{ add(OBJECT_MAPPER.readValue(jsonString, type));}}; 
    } 
+0

応答ありがとうございました。 2年後に申し訳ありません..ハハハ – PrabhakaranR

関連する問題