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

如何避免net.sf.json-lib转换XML时出现科学计数法

解决json-lib XML转JSON时长整数变为科学计数法的问题

首先,你遇到的这个问题根源在于:json-lib默认会把较大的整数解析为Double类型,而Double在表示超出常规长度的整数时,会自动切换为科学计数法格式。不过我们可以通过配置JsonConfig来强制它以Long类型处理整数,从而避免这个问题;如果觉得配置繁琐,更换更现代的库会是更省心的选择。

方法一:配置json-lib强制保留整数格式

你可以在调用xmlSerializer.read()时传入自定义的JsonConfig,指定数字类型为Long,同时添加处理器将误解析为Double的整数转换回Long:

XMLSerializer xmlSerializer = new XMLSerializer();
xmlSerializer.clearNamespaces();
xmlSerializer.setSkipNamespaces(true);
xmlSerializer.setForceTopLevelObject(false);

// 自定义JsonConfig,处理数字类型
JsonConfig jsonConfig = new JsonConfig();
// 设置默认Double处理器,将整数型Double转为Long
jsonConfig.setDefaultDoubleProcessor((value, config) -> {
    Double doubleVal = (Double) value;
    if (doubleVal.longValue() == doubleVal) {
        return doubleVal.longValue();
    }
    return value;
});

net.sf.json.JSON json = xmlSerializer.read(xmlString, jsonConfig);

这段代码会把原本被解析成Double的整数转换为Long类型,输出JSON时就会以完整的整数形式展示,而非科学计数法。

方法二:更换更现代的JSON/XML转换库

json-lib已经多年没有更新,存在不少兼容性和性能问题。如果后续还有更多复杂的序列化需求,非常推荐更换为Jackson或Gson这类维护活跃的现代库,它们默认就能正确处理大整数格式。

用Jackson实现转换的示例

Jackson的XmlMapper可以轻松解决这个问题,代码简洁且行为符合预期:

import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.fasterxml.jackson.databind.ObjectMapper;

public class XmlToJsonConverter {
    public static void main(String[] args) throws Exception {
        String xmlString = "<?xml version=\"1.0\" encoding=\"ISO-8859-15\"?>\n" +
                "<rootTag>\n" +
                "<_id type=\"number\">7000000001</_id>\n" +
                "</rootTag>";
        
        XmlMapper xmlMapper = new XmlMapper();
        Object xmlObj = xmlMapper.readValue(xmlString, Object.class);
        
        ObjectMapper jsonMapper = new ObjectMapper();
        String jsonString = jsonMapper.writeValueAsString(xmlObj);
        System.out.println(jsonString);
        // 输出结果:{"_id":7000000001}
    }
}

Jackson不仅能正确处理大整数,还支持丰富的自定义配置,社区活跃、文档完善,是当前Java生态中JSON/XML处理的主流选择。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:51:39