SyntaxError: Unterminated string in JSON at position N 表示解析器开始读一个字符串(看到一个开头的 "),然后在找到收尾的 " 之前就走到了输入的末尾 —— 或者撞上了换行。字符串没合上。下面讲讲为什么会这样,以及怎么修。
我遇到的是哪种字符串错误?
- Unterminated string —— 字符串以
"起头但没闭合。- Bad control character —— 未转义的原始 tab/换行/空字节出现在字符串内部。
- Bad escaped character —— 一个
\后面跟着 JSON 不允许的东西(比如\x、Windows 路径)。
错误长什么样
// V8 (Chrome / Node / Edge)
SyntaxError: Unterminated string in JSON at position 27
// Firefox
SyntaxError: JSON.parse: unterminated string at line 2 column 10 of the JSON data
// Safari
SyntaxError: JSON Parse error: Unterminated string
报的位置指向(或紧贴在)那个没合上的字符串开头的引号 —— 从那里往后看。
为什么会这样
原因 1 —— 未转义的引号提前结束了字符串
值里出现一个普通的 " 会提前结束字符串;这一行剩下的部分就被当成意外 token 读,而真正的那个字符串就被「敞着」了。
// ❌ 坏了 —— hello 前面那个引号把 "He said " 给关了
{ "note": "He said "hello" to her" }
// ✅ 修好 —— 内部引号用反斜杠转义
{ "note": "He said \"hello\" to her" }
原因 2 —— 字符串里有原始换行
JSON 字符串里不能直接跨越原始换行。一个字面换行会把字符串截断,让它处于未闭合状态。
// ❌ 坏了 —— 字符串里有真正的换行
{ "bio": "line one
line two" }
// ✅ 修好 —— 用 \n 转义,没有原始换行
{ "bio": "line one\nline two" }
原因 3 —— 数据被截断
响应在字符串中间断掉(连接掉了、缓冲/大小限制、部分读取)会让输入末尾留下一个没合上的字符串。
// 实际收到的(连接掉了):
{"user":{"name":"Ada Lovel
// → Unterminated string
怎么修 —— 一步步来
- 跳到报错位置,找到那个没有配对收尾的开头
"。 - 找值里有没有未转义的
"—— 把它写成\"。 - 找值里有没有原始换行/tab —— 把它换成
\n/\t。 - 检查是不是截断 —— 把字节长度和
Content-Length比一比;如果短了,说明数据被截断了(要改代码,不是改文本)。 - 别再手工拼 JSON 了。 用
JSON.stringify(),它会替你转义引号和控制字符。
// 预防:永远不要拼接字符串得到 JSON
const json = JSON.stringify({ note: userInput }); // 永远合法
常见问题
「Unterminated string in JSON」的原因是什么?
一个开头的 " 没有配对的收尾 " —— 通常是值里有未转义的引号、有原始换行,或者响应在字符串中间被截断。
怎么在 JSON 字符串里包含引号或换行?
把它们转义:双引号用 \",换行用 \n,tab 用 \t。用 JSON.stringify() 来构造 JSON 自动就处理好。
这和「Unexpected end of JSON input」是同一回事吗?
相关但不同。「Unterminated string」表示一个字符串开着没关;「Unexpected end of JSON input」 表示整个结构(对象/数组)提前结束。响应被截断这两种错误都可能触发。
立刻修复
- JSON Fix —— 在浏览器里找出未闭合的字符串并修好
- Unexpected End of JSON Input —— 整个结构被截断的情况
- JSON 字符串字面量里的 Bad Control Character —— 字符串里的原始 tab/换行
- JSON 里的 Bad Escaped Character —— 非法的反斜杠转义
来源
- RFC 8259 §7 —— JSON 字符串语法(定义字符串的结束符和必须转义的字符)
- MDN —
JSON.parse(产生此错误的解析器) - MDN —
JSON.stringify(预防方法——始终生成正确转义的字符串)
最后审阅:2026 年 6 月。