0
var jsn=getAttr(ref,"json-data").toString();
console.log(jsn); //{test: true,stringtest:"hallo"}. it's OK.
JSON.parse(jsn); //Uncaught SyntaxError: Unexpected token s, line: line with JSON.parse;

我认为JSON.parse这些数据有问题。我试图删除stringtest:"hallo"- 没有结果... PS:我也认为我做错了什么然后我问了这个问题

我第一次尝试JSON.parse("{"+jsn+"}");

4

1 回答 1

2

您的 JSON 格式不正确,因为您的对象键必须用引号引起来。以下将起作用:

var jsn = '{"test": true, "stringtest": "hallo"}';
JSON.parse(jsn);

编辑:指定 JSON 格式的 RFC4627 指出:

2.2. 对象


对象结构表示为一对围绕零个或多个名称/值对(或成员) 的花括号。名称是一个
字符串
。每个名称后面都有一个冒号,将名称
与值分开。单个逗号将值与后面的
名称分开。对象中的名称应该是唯一的。

  object = begin-object [ member *( value-separator member ) ]
  end-object

  member = string name-separator value

如您所见,JSON 对象由名称/值对组成,其中名称是字符串。同样,RFC 说:

字符串的表示类似于 C 系列编程语言中使用的约定。 字符串以
引号
开头和结尾。
除了必须转义的字符外,所有 Unicode 字符都可以放在引号内:
引号、反斜线和控制字符(U+0000
到 U+001F)。

string = 引号 *char 引号

引号 = %x22 ; "

因此,根据 RFC,键必须用双引号括起来,而不是单引号。尽管如此,我猜一些解析器可能更宽容并接受它们,但我会坚持标准。

于 2012-05-04T22:33:36.360 回答