2017-10-15 12 views
1

は以下のjson文書を考えてみましょう:JSONのプロパティにアクセスする二回

{ 
    "a": { 
    "one": "1", 
    "two": "2" 
    }, 
    "b": { 
    "three": "3", 
    "four": "4", 
    } 
} 

私はPOJO以下にそれをdeserizlizeする必要があります。

class Root{ 

@JsonAlias({"a","b"}) 
Node1 node1; 

@JsonAlias({"a","b"}) 
Node2 node2; 
} 

class Node1 { 
String one; 
String three; 
} 
class Node2 { 
String two; 
String four; 
} 

それは、ネストされたノード(ab)のように見えるができるだけでmapper.readValueの間に一度だけ横断されます。私はnode2から@JsonAlias({"a","b"})を削除する場合にのみnode2私はnode1から@JsonAlias({"a","b"})を削除する場合は、ジャクソンのみnode1に移入されます。

私は両方にannotaionを残す場合は、いずれか一方のみが読み込まれます。

このマッピングはサポートされていますか?そうでない場合、回避策は何ですか?私はジャクソン2.9.1

答えて

1

@JsonAliasを使用してい

は、あなたの場合node1node2に、直接、注釈付きのフィールドに適用されます。ジャクソンはNode1Node2クラスのフィールドを探すことはありません。例えば、クラスNode1のオブジェクトを解析するとき、それは関係なく、使用する別名の分野onethreeを期待し、それは両方を見つけることができません。この注釈セットをお勧めします。

class Root { 
    @JsonAlias("a") 
    Node1 node1; 

    @JsonAlias("b") 
    Node2 node2; 
} 

class Node1 { 
    String one; 

    @JsonAlias("two") 
    String three; 
} 

class Node2 { 
    @JsonAlias("three") 
    String two; 

    String four; 
} 

あなたの質問にJSONドキュメントを解析できます。

+0

おかげで、@マノス・ニコライディス、私のユースケースは、私が説明したよりも複雑です。私は最終的に[jolt](https://github.com/bazaarvoice/jolt)変換を途中で行い、変換されたオブジェクトをjacksonでRootオブジェクトに読み込みます。あなたの答えをもう一度おねがいします。 –