【问题标题】:JSON.parse failingJSON.parse 失败
【发布时间】:2018-05-23 14:00:19
【问题描述】:

我正在尝试从 JSON 字符串“对象”创建一个 JavaScript 对象,但它失败并出现错误:

“SyntaxError: JSON.parse: expected ',' or '}' after property value in object at line 1 column 48”

var jsobj = JSON.parse( '{"lineID":11,"siteID":3,"mystring":"this is a \"Test\" string with quotes"}' );

mystring 是一个包含双引号的字符串,但我已经用反斜杠正确地转义了它们。为什么会失败?

我注意到它在这个在线 JSON 解析网站上通过了:json parser

【问题讨论】:

    标签: javascript json parsing


    【解决方案1】:

    \ 字符是 JavaScript JSON 的转义字符。

    当 JavaScript 解析器解析字符串文字时,它会将 JavaScript 源代码中的 \" 转换为字符串中的 "

    当 JSON 解析器解析字符串时,它会发现一个未转义的 " 和错误。

    要在 JSON 数据中包含 \",您需要转义 JavaScript 字符串文字中的 \\\"

    var jsobj = JSON.parse('{"lineID":11,"siteID":3,"mystring":"this is a \\"Test\\" string with quotes"}');
    console.log(jsobj);

    嵌套数据格式总是很痛苦。最好尽可能避免这样做。

    首先在 JavaScript 中使用包含 JSON 的字符串是没有意义的。

    JSON 是 JavaScript 的子集。只需将 JSON 用作 JavaScript 文字即可。

    var jsobj = {
      "lineID": 11,
      "siteID": 3,
      "mystring": "this is a \"Test\" string with quotes"
    };
    
    console.log(jsobj);

    【讨论】:

    • 非常感谢昆汀!这太可怕了 - 但现在你已经解释了它很明显:-) 顺便说一句,我同意你的观点,但我在服务器端生成这个代码,这是一种将 .NET 对象转换为 JavaScript 对象的方法,而且麻烦最少。我在服务器上使用 JSON.SerializeObject(myObj) 可以将任何简单的 C# 对象转换为 JSON,然后在客户端使用 JSON.parse 将序列化对象转换为 JavaScript 对象。有了你的解决方案,我现在应该能够以最小的努力让它工作:-)
    【解决方案2】:

    对于双引号,您必须使用双反斜杠

    var jsobj = JSON.parse( '{"lineID":11,"siteID":3,"mystring":"this is a \\"Test\\" string with quotes"}' );
    

    这应该可以工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      • 1970-01-01
      • 2020-11-26
      • 2015-07-05
      相关资源
      最近更新 更多