You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jackson 2.12.7 XML转JSON时带属性元素空键名替换问题

解决Jackson XML转JSON时文本内容空键名的问题

针对你用Jackson 2.12.7的XMLMapper和ObjectMapper转XML到JSON时,XML元素文本内容对应JSON空键名的问题,有两种实用解决方式:

方式一:全局配置XMLMapper(无需定义POJO)

直接修改XMLMapper的默认文本节点名称,所有XML元素的文本内容都会映射到指定键名(比如"Value"或"City")。代码示例:

XmlMapper xmlMapper = XmlMapper.builder()
    // 替换成你想要的键名,比如"Value"
    .defaultTextNodeName("Value")
    .build();
ObjectMapper objectMapper = new ObjectMapper();

String xml = "<Address><Province Code=\"MI\">MILAN</Province></Address>";
JsonNode node = xmlMapper.readTree(xml);
String json = objectMapper.writeValueAsString(node);

执行后得到的JSON为:{"Province":{"Code":"MI","Value":"MILAN"}}

方式二:用POJO配合注解(适合结构化场景)

如果XML结构固定,可定义对应POJO类,通过@JacksonXmlText注解指定文本内容的JSON键名:

// Province类
public class Province {
    @JacksonXmlProperty(localName = "Code")
    private String code;
    
    // 字段名即为JSON键名,比如改为"City"会对应"City":"MILAN"
    @JacksonXmlText
    private String Value;

    // 生成getter、setter方法
}

// Address类
public class Address {
    private Province Province;

    // 生成getter、setter方法
}

转换代码:

XmlMapper xmlMapper = new XmlMapper();
ObjectMapper objectMapper = new ObjectMapper();

String xml = "<Address><Province Code=\"MI\">MILAN</Province></Address>";
Address address = xmlMapper.readValue(xml, Address.class);
String json = objectMapper.writeValueAsString(address);

这种方式适合需要严格映射XML结构的场景,键名可按需自定义。

内容的提问来源于stack exchange,提问作者ccirim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 01:52:08