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

Why json string from obj.getAttribute doesn't want to parse?

本文关键字:字符串 不想 json obj getAttribute 为什么      更新时间:2023-09-26
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+"}");.

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(。

字符串 = 引号 *字符引号

引号 = %x22 ;'">

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