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

如何让JSON.stringify保留JSON.parse解析前的\u格式Unicode转义字符?

如何在JSON.stringify时保留Unicode转义序列(如\u2013)?

你有一段包含Unicode转义序列\u2013的JSON输入:

{"source":"Subject: NEED: 11/5 BNA-MSL \u2013 1200L Departure - 1 Pax"}

使用JSON.parse读取后,\u2013会被解析为对应的短破折号字符–,这在应用展示中是正常的。但当你需要重新导出JSON给其他应用时,希望保留原有的\u2013转义格式,然而默认的JSON.stringify会直接输出字符–,而非转义序列。

以下是可行的解决方法:

精准替换特定字符

如果只需要保留特定几个字符的Unicode转义格式,可以在JSON.stringify后手动替换目标字符:

// 解析原始JSON
const parsedData = JSON.parse('{"source":"Subject: NEED: 11/5 BNA-MSL \\u2013 1200L Departure - 1 Pax"}');

// 自定义函数,将短破折号替换回\u2013
function stringifyWithSpecificEscape(obj) {
  return JSON.stringify(obj).replace(/–/g, '\\u2013');
}

// 获取带转义序列的结果
const outputJSON = stringifyWithSpecificEscape(parsedData);
console.log(outputJSON);
// 输出:{"source":"Subject: NEED: 11/5 BNA-MSL \u2013 1200L Departure - 1 Pax"}

通用方案:转义所有非ASCII字符

如果需要转义所有非ASCII字符(不止\u2013),可以用通用的转义逻辑,把所有ASCII范围外的字符转为\uXXXX格式:

function stringifyWithFullUnicodeEscape(obj) {
  return JSON.stringify(obj).replace(/[\u0080-\uffff]/g, char => {
    // 将字符编码转为4位十六进制,不足补零
    const hexCode = char.charCodeAt(0).toString(16).padStart(4, '0');
    return `\\u${hexCode}`;
  });
}

const outputJSON = stringifyWithFullUnicodeEscape(parsedData);
console.log(outputJSON);

注意事项

  • 优先使用精准替换方案,避免无差别转义导致其他正常字符被不必要处理。
  • 注意区分相似字符:–是U+2013(短破折号),—是U+2014(长破折号),替换时要匹配正确的目标字符。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 20:01:44