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

JSON字符串含0x0A换行符报错,自定义转义函数无效求助

解决React Native WebView输入转义JSON提交报错问题

问题核心

你遇到的'0x0A' is invalid within a JSON string错误,本质是原始输入中的换行符(ASCII 0x0A,即\n)未被正确转义为JSON要求的\\n。自定义转义函数可能没覆盖所有场景,或是转义时机不对。

修复步骤

1. 修正转义函数逻辑

确保转义函数能统一处理各类换行符及JSON特殊字符:

const escapeSpecialChars = (str) => {
  if (!str) return '';
  return str
    .replace(/<br\s*\/?>/gi, '\n') // 把HTML换行转成普通换行
    .replace(/\r?\n/g, '\\n')      // 把普通换行转义为JSON兼容的\\n
    .replace(/"/g, '\\"')          // 转义双引号
    .replace(/\\(?![nrtbf\\"])/g, '\\\\'); // 确保已有反斜杠被正确转义
};

2. 调整转义时机

不要在editorOnChange更新状态时转义,应该在封装JSON、准备fetch提交前执行转义——状态存原始输入更便于后续编辑,提前转义会导致显示异常:

const handleSubmit = async () => {
  const escapedContent = escapeSpecialChars(editorContent);
  const payload = JSON.stringify({ content: escapedContent });
  
  try {
    await fetch('你的接口地址', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: payload
    });
  } catch (err) {
    console.error('提交错误:', err);
  }
};

3. 排查隐藏控制字符

WebView的textarea可能传入不可见控制字符(比如\r,ASCII 0x0D),可以打印字符编码排查:

const editorOnChange = (content) => {
  Array.from(content).forEach((char, idx) => {
    console.log(`字符${idx}: ${char},编码: ${char.charCodeAt(0).toString(16)}`);
  });
  setEditorContent(content);
};

如果发现0x0D,在转义函数中添加.replace(/\r/g, '\\r')即可。

4. 优先使用JSON.stringify自动处理

其实无需手动写转义函数,JSON.stringify会自动处理所有JSON特殊字符,前提是传入的是原始字符串:

// 正确用法:直接传入原始状态值
const payload = JSON.stringify({ content: editorContent });

如果仍报错,说明输入已存在错误转义(比如\n未转成\\n),可先还原再处理:

const rawContent = editorContent.replace(/\\n/g, '\n');
const payload = JSON.stringify({ content: rawContent });

常见误区

  • 不要手动替换\n为\n(等于未处理),JSON要求字符串内换行必须是\\n。
  • 不要在WebView的HTML中提前转义输入,否则会导致二次转义,出现\\n变成\\\\n的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 21:51:00