我可以将JSON对象转换为JAXB对象吗?
问题描述:
我一直在使用JAXB对象。现在我的要求是使用JSON而不是XML。有人能帮我解决这个问题吗?我可以将JSON对象转换为JAXB对象吗?
我无法读取用json对象替换整个代码库。有什么办法将这些json转换成jaxb对象吗?
在此先感谢。
XML:
<skins>
<skin id="lineNormal" type="style" displayname="Skin">
<attributes datatype="string" value="one" name="bg_type" platform="general"/>
<attributes datatype="string" value="5c5c5c00" name="background_color" platform="general"/>
<attributes datatype="boolean" value="false" name="customcss" platform="general"/>
<attributes datatype="string" value="00000000" name="border_color" platform="general"/>
<attributes datatype="number" value="0" name="border_width" platform="general"/>
<attributes datatype="string" value="plain" name="border_style" platform="general"/>
<attributes datatype="number" value="0" name="border_radius" platform="general"/>
<attributes datatype="string" value="Line" name="wtype" platform="general"/>
</skin>
JSON:
{
"lineNormal": {
"wType": "Button",
"bg_type": "one",
"border_color": "00000000",
"border_radius": 0,
"border_style": "plain",
"border_width": 0,
"border_type": 0,
"font_color": "00000000",
"font_size": 100,
"font_weight": "normal",
"background_color : "xxx"
}
}
用于从上述获取的XML应用图表我的类文件是: '
@XmlRootElement(name = "application")
public class Application implements Serializable
{
private ArrayList <Container> containers;
private Skins skins = new Skins();
private String name;
private String id;
@XmlElement(name = "container")
public ArrayList <Container> getContainers() {
return containers;
}
/**
* Sets teh containers collection
* @param containers
*/
public void setContainers(ArrayList <Container> containers) {
this.containers = containers;
}
/**
*
* @return
*/
@XmlElement(name = "skins")
public Skins getSkins()
{
return skins;
}
/**
*
* @param skins
*/
public void setSkins(Skins skins)
{
this.skins = skins;
}
@XmlElement(name = "globals")
public Global getGlobal() {
return global;
}
public void setGlobal(Global global) {
this.global = global;
}
@XmlAttribute(name="id")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@XmlElement(name = "attributes")
public ArrayList<Attributes> getAttributes() {
return attributes;
}`
//皮肤类是: : `
public class Skins implements Serializable{
private ArrayList <Skin> skins = new ArrayList();
@XmlElement(name = "skin")
public ArrayList<Skin> getSkinList()
{
return skins;
}
/**
*
* @param skins
*/
public void setSkinList(ArrayList<Skin> skins)
{
this.skins = skins;
}
}
`
答
“我可以转换成JSON对象JAXB对象?”
jackson-module-jaxb-annotations对于Jackson将允许你这样做。
这个杰克逊扩展模块提供了对使用JAXB(javax.xml.bind)注释替代本机Jackson注释的支持。它最常用于使重用与JAXB框架一起使用的现有数据bean更容易读取和写入XML。
与Maven,你只需要这个依赖(这将在其他几个杰克逊的核心依赖拉):
<dependency>
<groupId>com.fasterxml.jackson.module</groupId>
<artifactId>jackson-module-jaxb-annotations</artifactId>
<version>2.4.0</version>
</dependency>
有了这种依赖性,你只需要注册与ObjectMapper
JaxbAnnotationModule module = new JaxbAnnotationModule();
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(module);
然后,您可以将JSON读入JAXB对象。
RootObject root = objectMapper.readValue(json, RootObject.class);
由于模块不支持所有JAXB注释,因此这不是所有用例的必然解决方案。见here for supported annotations
- 您可能也想看看这个莫西支持,as seen here
但问题是我没有特定的ID名称和all.I只是skin1,其数据,skin2及其数据等等.skin1 skin2 ..是不同的id。这个实现在任何地方都找不到。请你帮我实现这个 – honey123 2014-10-08 04:49:14
我们至少需要看看你正在使用的JAXB类,或从一个xsd我们可以生成JAXB类 – 2014-10-08 05:25:51
这里是我的一个类文件。 @XmlRootElement(name =“application”) public class Application实现Serializable Private ArrayList containers; private skins skins = new Skins(); @XmlElement(name =“container”) public ArrayList getContainers(){ return containers; } //这样的设置器和获取器 }和皮肤是用于检索所有皮肤的另一类,并且为每个单独的皮肤提供皮肤类 –
honey123
2014-10-08 05:31:49