【问题标题】:JSON.parse unexpected character errorJSON.parse 意外字符错误
【发布时间】:2012-01-21 10:26:06
【问题描述】:

我收到此错误:

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的服务器响应

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    你不是在解析一个字符串,你是在解析一个已经解析过的对象:)

    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.
    

    【讨论】:

    • 我想为第一句话点赞,但你为什么要重新解析?
    • @MarcelKorpel,数学:对。已更新。
    • @Mathletics 众所周知,JSON.parse 会进行一些安全检查。新界
    • 太搞笑了。爱它。
    • 我在 data.results 上未定义(数据是 JSON 对象)。 Stack 告诉我通过 data = JSON.parse(data) 使其成为 js 对象。但我收到 JSON.parse 意外字符错误。
    【解决方案2】:

    您可以通过简单地使用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));
    

    【讨论】:

    • JSON.stringify 是老大。
    【解决方案3】:

    对于 OP 而言并非如此,但此错误可能是由于对字符串使用单引号 (') 而不是双引号 (") 引起的。

    JSON spec 要求字符串使用双引号。

    例如:

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

    给出错误,而

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

    没有。注意myString 周围的引号。

    相关:https://stackoverflow.com/a/14355724/1461850

    【讨论】:

      猜你喜欢
      • 2014-04-17
      • 1970-01-01
      • 2013-06-02
      • 2013-12-02
      • 2012-03-30
      • 2014-09-08
      • 2012-07-18
      相关资源
      最近更新 更多