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

NextJS依赖升级后JSON.stringify单引号转义异常排查

问题根源排查与解决办法

核心结论

这个转义异常由Node.js 18的V8引擎更新导致,与React 18升级无关。

排查验证步骤

  1. 脱离Next.js/React环境,分别在Node.js 16和18中运行以下测试代码:
const testObj = {
  handler: () => {
    return 'EventName';
  }
};

const customReplacer = (key, val) => 
  typeof val === 'function' ? val.toString() : val;

console.log(JSON.stringify(testObj, customReplacer));
  1. 对比输出:
    • Node.js 16输出:{"handler":"() => {\n return 'EventName';\n }"}
    • Node.js 18输出:{"handler":"() => {\n return \\\"EventName\\\";\\n }"}

原因解析

Node.js 18升级了V8引擎至10.x版本,其中JSON.stringify对函数序列化后的字符串处理逻辑做了调整:当字符串中包含单引号时,会将其替换为转义的双引号(\"),以此严格遵循JSON字符串的双引号包裹规范——尽管函数本身不属于JSON合法值,但自定义replacer返回字符串后,JSON.stringify会按标准JSON规则处理该字符串。

React 18的核心更新集中在并发渲染、自动批处理等渲染逻辑上,并未修改全局JSON API的实现,因此可以排除React升级的影响。

修复方案

在现有清理换行符的工具函数中,新增转义双引号还原逻辑:

function sanitizeScriptContent(rawContent) {
  return rawContent
    .replace(/\\n/g, '') // 清理换行符
    .replace(/\\"/g, "'"); // 将转义双引号还原为单引号
}

// 使用示例
const serializedData = JSON.stringify(yourObjectWithFunctions, customReplacer);
const safeScriptContent = sanitizeScriptContent(serializedData);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 10:02:19