我正在使用Jackson objectMapper
将JSON读取到JsonNode,然后我使用xmlMapper
将其序列化为XML。
我想通过使用标记" @"解析JSON
属性来设置XML属性值。任何帮助,将不胜感激。感谢。
示例JSON:
{
"response" : {
"label" : {
"@data" : "someValue"
}
}
}
需要映射到XML:
<response>
<label data="someValue" />
</response>
这就是我现在能得到的:
<response>
<label>
<@data>someValue</@data>
</label>
</response>
CODE:
JsonNode root = objectMapper.readTree(JSON);
xml = xmlMapper.writeValueAsString(root);
答案 0 :(得分:1)
好吧,我找到了一个产生所需输出的解决方案。但是,我不确定这是否是一个最佳解决方案,从某种意义上说它需要自定义内部类来指定告诉映射器如何解析的注释。
import java.util.*;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.type.TypeFactory;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
public class JSONTest
{
@SuppressWarnings("unchecked")
public static void main(String[] args)
{
try {
String jsonInput = "{ \"response\" : { \"label\" : { \"@data\" : \"someValue\" } }}";
ObjectMapper om = new ObjectMapper();
TypeFactory tf = om.getTypeFactory();
JavaType mapType = tf.constructMapType(HashMap.class, String.class, response.class);
Map<String, response> map = (Map<String, response>)om.readValue(jsonInput, mapType);
XmlMapper xmlMapper = new XmlMapper();
String ss = xmlMapper.writeValueAsString(map.get("response"));
System.out.println(ss);
} catch (Exception e) {
e.printStackTrace();
}
}
public static class response {
public Label label;
}
public static class Label {
@JsonProperty("@data")
@JacksonXmlProperty(isAttribute = true)
public String data;
}
}
输出:
<response><label data="someValue"/></response>