为什么obj.getAttribute的json字符串不想解析?

时间:2012-05-04 22:27:19

标签: javascript json

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+"}");

1 个答案:

答案 0 :(得分:2)

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

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

编辑:RFC4627,指定JSON格式,声明:

  

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 = quotation-mark * char quotation-mark

     

quotation-mark =%x22; “

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