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

为何复制JSON.stringify输出到JSON.parse会报Unexpected token '错误?

这问题我之前也碰到过!根源其实是JSON的语法规则比JS对象字面量严格得多——JSON要求所有的键名和字符串值必须用双引号包裹,而你手动复制粘贴的字符串里用了单引号,这就违反了JSON规范,所以JSON.parse直接报错了。

为什么正常代码能运行?

你用JSON.stringify(employee)生成的字符串,是完全符合JSON语法标准的——它会自动把所有的引号转换成双引号,同时处理好其他JSON语法细节,所以后续用JSON.parse解析自然不会有问题。

报错代码的问题点

看你这段报错的代码:

const person = JSON.parse("{'id':0,'firstName':'Andy','subordinates':[{'id':1,'firstName':'James','subordinates':[{'id':3,'firstName':'Aubrey','subordinates':null}]},{'id':2,'firstName':'Collin','subordinates':null}]}");

这里面的'id'、'Andy'都是单引号,JSON解析器根本不认可单引号作为字符串或键名的包裹符,所以在解析的第1个位置就碰到了非法的'字符,直接抛出错误。

解决办法

  1. 手动修正引号:把JSON字符串里所有的单引号换成双引号,同时注意外层可以用单引号或者反引号来包裹整个JSON串,避免和内部的双引号冲突:
// 外层用单引号,内部双引号
const person = JSON.parse('{"id":0,"firstName":"Andy","subordinates":[{"id":1,"firstName":"James","subordinates":[{"id":3,"firstName":"Aubrey","subordinates":null}]},{"id":2,"firstName":"Collin","subordinates":null}]}');

// 或者外层用反引号
const person = JSON.parse(`{"id":0,"firstName":"Andy","subordinates":[{"id":1,"firstName":"James","subordinates":[{"id":3,"firstName":"Aubrey","subordinates":null}]},{"id":2,"firstName":"Collin","subordinates":null}]}`);
  1. 避免手动复制:最稳妥的方式还是像你正常代码那样,直接使用JSON.stringify的输出结果,不要手动复制粘贴后再修改——毕竟手动操作很容易不小心引入不符合JSON规范的语法,比如单引号、多余的逗号之类的。

额外提醒:JSON和JS对象字面量的关键区别

  • JSON的键必须用双引号,JS对象字面量的键可以不用引号,或者用单/双引号
  • JSON的字符串只能用双引号,JS字符串可以用单/双/反引号
  • JSON不支持undefined、函数、Symbol等JS特有的类型,JSON.stringify会把这些类型忽略或者转成null
  • JSON不允许末尾有多余的逗号(trailing commas),JS对象字面量在现代浏览器里允许

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:45:25