JSON.parse遇到意外字符错误

118

我遇到了这个错误:

JSON.parse:不期望的字符

当我在Firebug中执行以下语句时:

JSON.parse({"balance":0,"count":0,"time":1323973673061,"firstname":"howard","userId":5383,"localid":1,"freeExpiration":0,"status":false});

为什么会这样呢?JSON字符串对我来说看起来是正确的,我还使用JSHint进行了测试。在上面的情况下传递的对象是一个服务器响应,内容类型设置为application/json

为什么会这样呢?JSON字符串对我来说看起来是正确的,我还使用JSHint进行了测试。在上面的情况下传递的对象是一个服务器响应,内容类型设置为application/json
3个回答

229

你没有在解析一个字符串,你正在解析一个已经被解析的对象 :)

var obj1 = JSON.parse('{"creditBalance":0,...,"starStatus":false}');
//                    ^                                          ^
//                    if you want to parse, the input should be a string 

var obj2 = {"creditBalance":0,...,"starStatus":false};
// or just use it directly.

我想为第一句点赞,但是你为什么要重新解析? - Evan Davis
1
@MarcelKorpel,Mathletics:正确。已更新。 - kennytm
@Mathletics 根据所有记录,JSON.parse进行了一些安全检查。N.T. - B.F.
5
太搞笑了,喜欢它。<3 - Darth Egregious
1
我在 data.results 上得到了 undefined(data 是一个 JSON 对象)。Stack 告诉我通过 data = JSON.parse(data) 将其转换为 js 对象。但是我得到了 JSON.parse 意外字符错误。 - KasparTr

41

在将对象传递给解析函数之前,您可以通过简单地使用 JSON.stringify() 来确保所讨论的对象已被字符串化。

更新下面的行:

JSON.parse(JSON.stringify({"balance":0,"count":0,"time":1323973673061,"firstname":"howard","userId":5383,"localid":1,"freeExpiration":0,"status":false}));

或者如果您已经将JSON存储在某个变量中:

JSON.parse(JSON.stringify(yourJSONobject));

4
JSON.stringify 是老大。 - Kenmeister
非常感谢,节省了很多时间。 - Ananta Raha

0

对于OP来说不是真的,但是使用单引号(')代替双引号(")来表示字符串可能会导致这个错误。

JSON规范要求使用双引号来表示字符串。

E.g:

JSON.parse(`{"myparam": 'myString'}`)

出现错误,而

JSON.parse(`{"myparam": "myString"}`)

不是。请注意myString周围的引号。

相关链接:https://dev59.com/RWYq5IYBdhLWcg3wmRua#14355724


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接