【问题标题】:JSON serialization of simple objects is inconsistent简单对象的 JSON 序列化不一致
【发布时间】:2012-11-02 14:55:43
【问题描述】:

我使用的每个 JSON 序列化实用程序或库似乎都已损坏,对此我无法得到合乎逻辑的解释。

让我解释一下。我在 Firebug 中为 .NET 的 JSON 库运行以下代码,可能适用于其他语言。

我只是在运行时检查 Firefox:

var obj1 = "test";
var obj1serialization = JSON.stringify(obj1);

输出为""test""。但这是无效的 JSON 对象!因此,当我尝试从该序列化 JSON 重新创建对象时,它失败了,说明 JSON 字符串不正确:

var obj2 = JSON.parse(obj1serialization);

字符串是对象。但是它们在 JSON 中的序列化不起作用。这种情况有什么合乎逻辑的解释吗?

【问题讨论】:

  • “我使用的每一个 JSON 序列化实用程序或库似乎都被破坏了......” 事实上,它们中的每一个都应该向您表明您的理解可能是不完整的,而不是其他人都弄错了。 :-)

标签: javascript json serialization


【解决方案1】:

JSON 中(与几种编程语言不同),字符串不是对象,它们是基本类型(如数字和布尔值)。您要求序列化程序创建一个 JSON 片段。有效 JSON 文档的顶级项始终是对象或数组。如果您将其中一个输入到JSON.stringify,它将生成一个有效、完整的 JSON 文档。

大多数 JSON 序列化程序都允许片段这一事实非常有用。如果你向它们传递了不是对象或数组的东西,它们唯一的选择就是抛出异常。

JSON.parse 限制性更强,要求您提供的 JSON 文档既完整又格式良好。并非所有 JSON 解析例程都有那么严格,但确实如此。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-30
    • 2013-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-22
    相关资源
    最近更新 更多