使用fast-xml-parser转XML为JSON时sku字符串值异常问题求助
fast-xml-parser XML转JSON时长串精度丢失问题解答
问题成因
- fast-xml-parser默认开启属性值、标签值的自动类型转换逻辑,会尝试将内容解析为数字、布尔值等原生JS类型,部分旧版本还会自动将十六进制格式字符串转换为十进制数字。
- JavaScript内置Number类型为双精度64位浮点数,仅能安全表示
-2^53 ~ 2^53(即-9007199254740991 ~ 9007199254740991)范围内的整数,超出该范围的整数值会出现精度丢失,末尾多位被截断补0。
解决方案
方案1:全局关闭自动类型转换
如果不需要自动转换任何值的类型,直接关闭对应配置项即可,所有值都会保留原始字符串格式:
const { XMLParser } = require('fast-xml-parser'); const parser = new XMLParser({ parseAttributeValue: false, // 关闭属性值自动类型转换 parseTagValue: false // 若需保留标签文本值的自动转换可删除该行 });
方案2:自定义指定字段的处理逻辑
如果需要保留其他字段的自动转换能力,可通过处理器配置单独控制sku字段的返回值:
const parser = new XMLParser({ parseAttributeValue: true, // 自定义属性值处理逻辑 attributeValueProcessor: (attrName, attrValue) => { if (attrName === 'sku') return attrValue; // 其他属性走默认转换逻辑 return attrValue; }, // 如果sku是标签内的文本值,添加以下配置 tagValueProcessor: (tagName, tagValue) => { if (tagName === 'sku') return tagValue; return tagValue; } });
方案3:升级工具版本
旧版本fast-xml-parser的类型推断逻辑存在缺陷,易出现字符串误转数字的问题,升级到4.x及以上稳定版本可规避这类问题。
内容的提问来源于stack exchange,提问作者Ankur Jindal
相关产品推荐
相关产品推荐

