Spring Boot中使用Jackson XML Mapper实现XHTML转字符串的问题咨询
基于XML Mapper实现自定义XML转目标JSON的方案
核心实现步骤
- 第一步:解析自定义my.xml文件
如果你使用Java生态的Jackson XML Mapper,先完成映射器初始化和文件解析,不需要提前定义实体类的场景可以直接解析为Map结构:// 初始化XML Mapper XmlMapper xmlMapper = new XmlMapper(); // 关闭未知字段报错开关,适配自定义XML的非固定结构 xmlMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); // 忽略XML命名空间,避免命名空间带来的解析异常 xmlMapper.configure(FromXmlParser.Feature.IGNORE_NAMESPACE, true); // 方式1:有对应实体类时直接解析为POJO MyXmlEntity xmlEntity = xmlMapper.readValue(new File("my.xml"), MyXmlEntity.class); // 方式2:无实体类时直接解析为通用Map结构 Map<String, Object> xmlDataMap = xmlMapper.readValue(new File("my.xml"), Map.class); - 第二步:结构映射调整
按照你需要的JSON格式要求,调整解析得到的对象/Map结构:包括字段重命名、嵌套结构调整、数据类型转换、冗余字段过滤,比如将XML解析得到的user_name字段重命名为JSON需要的userName,将字符串类型的数字转换为数值类型。 - 第三步:序列化输出JSON
用JSON序列化工具将调整后的结构输出为符合要求的JSON字符串,按需配置输出规则:ObjectMapper jsonMapper = new ObjectMapper(); // 配置输出时忽略空值字段 jsonMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL); // 配置格式化输出,不需要格式化可以去掉writerWithDefaultPrettyPrinter() String targetJson = jsonMapper.writerWithDefaultPrettyPrinter().writeValueAsString(xmlEntity);
特殊场景适配
- 如果你只需要提取XML中的部分字段生成JSON,可以直接用XPath定位提取需要的节点值,直接组装成目标JSON结构,不需要全量解析整个XML文件,性能更高。
- 如果XML存在重复节点、属性和子节点重名的情况,可以在XML Mapper中配置
USE_WRAPPER_AS_ARRAY_NAME等特性适配解析规则,避免解析结果结构异常。
内容的提问来源于stack exchange,提问作者Anonim
相关产品推荐
相关产品推荐

