2017-07-23 46 views
0

我有一个场景,在运行时根据JSON值我必须将它们转换为选择我们必须使用哪些JAVA类来初始化它们。 下面是两个JSON例子使用Jackson映射JSON到Java类

JSON例1:

{ 
    "parentVal1" : "parent Val 1", 
    "parentVal2" : "parent val 2", 
    "childVal1" : "child Val 1", 
    "childVal2" : { 
    "childPropVal1" : "child prop 1", 
    "grandChild" : { 
     "maleGrandChildVal1" : "male grand child 1", 
     "maleGrandChildVal2" : "male grand child 2" 
    } 
    } 
} 

JSON例2:现在

{ 
    "parentVal1" : "parent Val 1", 
    "parentVal2" : "parent val 2", 
    "childVal1" : "child Val 1", 
    "childVal2" : { 
    "childPropVal1" : "child prop 1", 
    "grandChild" : { 
     "femaleGrandChildVal1" : "female grand child 1", 
     "femaleGrandChildVal2" : "female grand child 2" 
    } 
    } 
} 

,对应的Java类,我提出和类图是

public class Parent{ 
    private String parentVal1; 
    private String parentVal2; 

    //getters and setters 
} 

public class Child extends{ 
    private String childVal1; 
    private ChildProperty childVal2; 

    //getters and setters 
} 

public class ChildProperty{ 
    private String childPropVal1; 
    private GrandChildAbstract grandChild; 

    //getters and setters 
} 

public class GrandChildAbstract{ 

} 

public class MaleGrandChild extends GrandChildAbstract{ 
    private String maleGrandChildVal1; 
    private String maleGrandChildVal2; 
    //setters and getters 
} 

public class FemaleGrandChild extends GrandChildAbstract{ 
    private String femaleGrandChildVal1; 
    private String femaleGrandChildVal2; 

    //setters and getters 
} 

enter image description here

的问题是在运行时,我会得到一个JSON和必须决定它是否属于MaleGrandChild or FemaleGrandChild取决于ChildProperty.childPropVal1,我从JSON获得。

任何人都可以帮助我有任何方式可以初始化ChildProperty.grandChild财产与各自的FemaleGrandChild or MaleGrandChild对象。

我使用Jackson从JSON转换为JAVA。

回答

0

您是否阅读过有关Jackson的多态反序列化? http://wiki.fasterxml.com/JacksonPolymorphicDeserialization

通常您使用JsonTypeInfo提供类型。这让杰克逊能够理解如何映射特定的对象。

如果你不能真正对JSON进行任何操作(例如,如果你不是来源的),你可以编写一个自定义映射器(不是简单的),或者你可以将这些属性设置为简单的Map,你的应用程序的一部分处理类型。

+0

谢谢...我会尽力阅读有关它.. – utkarsh31

+0

非常感谢你的帮助..它工作... – utkarsh31

相关问题