2011-10-27 2 views
1

現在、Jacksonライブラリを使用して、アノテーションを使用してjsonからpojosを非整列化しています。jsonとジャクソンとのマップを平らにする

次のように私は非整列化したいJSONツリーは次のとおりです。

{ 
    "key1":"value1", 
    "key2":"value2", 
    "key3":{ 
     "key31":{ 
      "key311":"value311", 
      "key312":"value312", 
      "key313":"value313" 
     }, 
     "key32":"value32" 
    }, 
    "key4":"value4", 
    "key5":"value5", 
    "key6":{ 
     "key61":"value61" 
    } 
} 

私は事前にJSONの構造を知らないと、完全に内容はと等価になる地図にそれを平らにしたいと思います:注釈@JsonAnySetterを使用して

Map<String, Object> outputMap = new HashMap<String, Object>(); 
outputMap.put("key1", "value1"); 
outputMap.put("key2", "value2"); 
outputMap.put("key311", "value311"); 
outputMap.put("key312", "value312"); 
outputMap.put("key313", "value313"); 
outputMap.put("key32", "value32"); 
outputMap.put("key4", "value4"); 
outputMap.put("key5", "value5"); 
outputMap.put("key61", "value61"); 

(キー "KEY3"、 "key31" と "KEY6" は無視されるべきであることに注意してください)

、私はfunctiを作成することができますすべての最上位レベルのアトムをマップに取り込みますが、このメソッドは子を持つノードもキャッチします(値がMapの場合)。

その時点から、私はもちろん子どもの上に簡単な再帰を書くことができますが、私はこの部分をライブラリからの施設の使用によって自動的に(エレガントな方法で)処理したいと思います(注釈、設定、など)、自分で再帰を書く必要はありません。

注:異なるレベルキーには名前の衝突がないものとします。

答えて

1

@JsonUnwrappedはマップではなくPOJOでのみ使用可能なので、私が知っているアノテーションベースのメカニズムはありません。 @ JsonUnwrappedにマップケースを扱うように拡張要求をすることもできますが、シリアライゼーションにはうまくいくようですが(逆シリアル化の仕組みがわからない)

関連する問題