2016-12-22 5 views
0

ジャクソンを使用してMap to Javaオブジェクトをシリアル化しようとしています。現在、私が持っているJavaはさまざまな名前のjsonプロパティをシリアル化します

"MediaUrl1": "https://someValidUrl2", 
    "MediaUrl0": "https://someValidUrl1", 
    "MediaContentType1": "image/jpeg", 
    "MediaContentType0": "image/jpeg", 

のようにキーを使用してJSONのプロパティを処理するためのクリーンな方法はありますあり、私が得るカップル異なるマップがあり、そのうちの一つは、

{ 
    "MediaUrl1": "https://someValidUrl2", 
    "ApiVersion": "v1", 
    "MediaUrl0": "https://someValidUrl1", 
    "ToZip": "", 
    "FromCity": "xxxx", 
    "To": "+1234567890", 
    "FromZip": "123456", 
    "ToCountry": "xxxx", 
    "Body": "Testing more than one media item with message", 
    "MediaContentType1": "image/jpeg", 
    "MediaContentType0": "image/jpeg", 
    "NumMedia": "2", 
    "FromState": "xxxx" 
} 

(JSON形式)は、次のようになります私は私が私が得るどのように多くのMediaContentType#、MediaUrlの#のプロパティ手前に知っておくための方法はありません

objectMapper.convertValue(inputMap, JavaObject.class)) 

を使用して生成していますPOJO。ありがとう。

+0

リストを追加する<> mediaUrls = new ArrayList <>(); – Zorglube

+1

なぜ配列を使用しないのですか? –

答えて

0

いつもjsonをMap<String, Object>に割り当てることができます。

Map<String, Object> obj = new ObjectMapper().readValue(src, 
        new TypeReference<HashMap<String, Object>>() {}); 

マップは、任意の種類と数のプロパティを簡単に処理できます。

+0

これはうまくいくが、下流のコンシューマーにとっては難しいことだ。私はちょうどJsonNodeを使うことを考えていました。 – jallaad

+0

これを処理し、POJOとして(私が考えていた)POJOとして渡すのが良い方法がない場合は、タイプがあるurlを含むメディアエントリのリスト、それから、他の選択肢はありません。 JsonNode。 – jallaad

+0

jsonの構造を決定できる場合は、MediaUrl1、MediaUrl2などをMediaUrlsという名前の配列に変更できます。 jsonの構造を変更することはできませんが、最大でいくつのMediaUrlがJsonに存在するか知っていれば、MediaUrl1、MediaUrl2、...、MediaUrl でクラスを作成し、それらのいくつかをnullにすることができます –

0

私はmediaContentTypeとmediaUrlsを別々に処理しました。回答とコメントをありがとう。

関連する問題