gpt4 book ai didi

java - 将 Jackson json 属性映射到相应的 xml 元素

转载 作者:数据小太阳 更新时间:2023-10-29 02:39:47 24 4
gpt4 key购买 nike

我正在使用 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>

代码:

JsonNode root = objectMapper.readTree(JSON); 
xml = xmlMapper.writeValueAsString(root);

最佳答案

好吧,我找到了一个可以产生所需输出的解决方案。但是,我不确定这是否是最佳解决方案,因为它需要自定义内部类才能指定告诉映射器如何解析的注释。

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>

关于java - 将 Jackson json 属性映射到相应的 xml 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33209083/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com