使用JSON.stringify的replacer函数转字符串为数字无效问题排查
问题:JSON.stringify的replacer函数无法将指定字符串字段转为数字
你的代码问题出在replacer函数里的forEach逻辑无效,导致转换根本没执行,最后总是返回原值。
问题原因
forEach遍历数组时,内部的return语句只会终止当前循环的回调,不会把值返回给外部的replacer函数。不管你在forEach里做了什么,最后replacer都会执行return value,所以输出和原数据完全一致。另外你forEach里的return field属于无效代码,对结果没有任何影响。
修正后的代码
直接判断当前key是否在需要转换的字段列表中,再处理类型转换:
const NUMBER_FIELDS = [ 'count', 'age', 'hours', ]; const payload = { "name": "John Doe", "age": "35", "country": "Canada", "count": 4, "hours": "100" } function replacer(key, value) { // 判断当前字段需要转换,且值为字符串类型 if (NUMBER_FIELDS.includes(key) && typeof value === 'string') { return parseInt(value, 10); } // 其他情况返回原值 return value; } const postBody = JSON.stringify(payload, replacer); // 输出结果:{"name":"John Doe","age":35,"country":"Canada","count":4,"hours":100}
额外优化(可选)
如果要处理字符串无法转为有效数字的情况(比如"abc"),可以加个判断避免出现NaN转成null的问题:
function replacer(key, value) { if (NUMBER_FIELDS.includes(key) && typeof value === 'string') { const num = parseInt(value, 10); // 转成有效数字才返回,否则保留原字符串 return isNaN(num) ? value : num; } return value; }
内容的提问来源于stack exchange,提问作者Mustang
相关产品推荐
相关产品推荐

