50

为什么每当我这样做时:-

JSON.parse('"something"')

它解析得很好,但是当我这样做时:-

var m = "something";
JSON.parse(m);

它给了我一个错误说: -

Unexpected token s
4

5 回答 5

67

您要求它解析 JSON 文本something(不是"something")。那是无效的 JSON,字符串必须用双引号引起来。

如果您想要与第一个示例等效的内容:

var s = '"something"';
var result = JSON.parse(s);
于 2013-09-13T17:12:41.387 回答
18

在删除字符串的换行引号后,您传递给 JSON.parse 方法的内容必须是有效的 JSON。

所以something不是一个有效的 JSON,但"something"它是。

有效的 JSON 是 -

JSON = null
    /* boolean literal */
    or true or false
    /* A JavaScript Number Leading zeroes are prohibited; a decimal point must be followed by at least one digit.*/
    or JSONNumber
    /* Only a limited sets of characters may be escaped; certain control characters are prohibited; the Unicode line separator (U+2028) and paragraph separator (U+2029) characters are permitted; strings must be double-quoted.*/
    or JSONString

    /* Property names must be double-quoted strings; trailing commas are forbidden. */
    or JSONObject
    or JSONArray

例子 -

JSON.parse('{}'); // {}
JSON.parse('true'); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null'); // null 
JSON.parse("'foo'"); // error since string should be wrapped by double quotes

您可能想查看JSON

于 2013-09-13T17:13:59.757 回答
7

变量 ( something) 不是有效的 JSON,请使用http://jsonlint.com/进行验证

于 2013-09-13T17:11:53.120 回答
3

有效的 json 字符串必须有双引号。

JSON.parse({"u1":1000,"u2":1100})       // will be ok

没有报价导致错误

JSON.parse({u1:1000,u2:1100})    
// error Uncaught SyntaxError: Unexpected token u in JSON at position 2

单引号导致错误

JSON.parse({'u1':1000,'u2':1100})    
// error Uncaught SyntaxError: Unexpected token u in JSON at position 2

您必须在https://jsonlint.com上提供有效的 json 字符串

于 2018-06-06T23:15:47.973 回答
2

因为 JSON 具有字符串数据类型(实际上介于"和之间")。它没有匹配的数据类型something

于 2013-09-13T17:11:59.233 回答