我使用的每个JSON序列化实用程序或库似乎都被破坏了,我无法对此进行逻辑解释。
让我解释一下。我在Firebug中为.NET的JSON库运行以下代码,可能用于其他语言。
我在运行时检查Firefox:
var obj1 = "test";
var obj1serialization = JSON.stringify(obj1);
输出为""test""
。但这是无效的JSON对象!因此,当我尝试从该序列化的JSON重新创建对象时,它失败了,说明JSON字符串不正确:
var obj2 = JSON.parse(obj1serialization);
字符串是对象。但他们在JSON中的序列化无法正常工作。对这种情况有任何合理的解释吗?
答案 0 :(得分:3)
在JSON中(与几种编程语言不同),字符串不是对象,它们是原语(如数字和布尔值)。您要求序列化程序创建JSON 片段。有效的JSON文档的顶级项始终是对象或数组。如果您将其中一个提供给JSON.stringify
,它将生成一个有效的完整JSON文档。
大多数JSON序列化程序允许片段这一事实非常有用。他们唯一的替代方案是,如果你将一些东西传递给不是对象或数组的东西,就会抛出异常。
JSON.parse
限制性更强,要求您提供的JSON文档既完整又格式良好。并非所有JSON解析例程都具有限制性,但那个是。