为什么Javascript使用JSON.stringify而不是JSON.serialize?


18

我只是想知道“ stringify”“ serialize”。对我来说,它们是同一件事(尽管我可能错了),但是根据我过去的经验(主要是使用),我使用Serialize()并且从未使用过Stringify()

我知道我可以用Javascript创建一个简单的别名,

// either
JSON.serialize = function(input) {
    return JSON.stringify(input);
};

// or
JSON.serialize = JSON.stringify;

http://jsfiddle.net/HKKUb/

但是我只是想知道两者之间的区别以及为什么选择stringify。


出于比较目的,这是在C#中将XML序列化为字符串的方法

public static string SerializeObject<T>(this T toSerialize)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
    StringWriter textWriter = new StringWriter();

    xmlSerializer.Serialize(textWriter, toSerialize);
    return textWriter.ToString();
}

7
其实你不能做JSON.serialize = JSON.stringify吗?
Daniel DiPaolo 2012年

为什么可以呢。
Chase Florell 2012年

1
我想在重新阅读我的问题之后,我看到在我的C#示例中,我正在对XML进行序列化,然后对序列化的对象进行转换ToString();。那里有摩擦。
Chase Florell 2012年

我想为了连续性,(对我来说)拥有一个看起来像这样的方法会更好... JSON.serialize(obj).toString();jsonObject().toString();...这样看起来像我的C#...但现在我已经使它复杂了。
Chase Florell

Answers:


12

仔细看看您对问题提出的两条评论:

我想在重新阅读我的问题之后,我看到在我的C#示例中,我正在序列化XML,然后将序列化的对象转换为ToString();。那里有摩擦。

我想为了连续性,(对我来说)拥有一个看起来像这样的方法会更好(JSON.serialize(obj).toString();)。或jsonObject()。toString(); ...这样看起来就好像我的C#...,但是现在我已经使它复杂了。

现在请记住,在Javascript中,对象是一个哈希(相反,如果使用Prototype或其他框架,则应将其限定为“特殊类型的哈希”,但此示例适用于简单的形式):

var obj = {
   foo: 1,
   bar: function() { console.log(this.foo); }
}
obj.foo; // 1
obj.bar; // function reference
obj.bar(); // function call
obj['foo']; // 1
obj['bar']; // function reference
obj['bar'](); // function call

serialize()在Javascript中可能需要a的唯一原因是剪切函数,对其他对象的引用等。

因此,回到您的C#示例-我们已将.Serialize()多余的内容删掉了。一个对象是一个哈希,它已经被序列化了,无论如何,都必须在自己的代码中手动完成进一步的“序列化”。剩下的就是你了.ToString()

难道.stringify()现在更有意义?


是的,字符串化是有意义的,但是我还是愿意使用.toString()
Chase Florell 2012年

7
toString可能意味着任何东西。JSON.stringify显然是JSON。
布兰登

11

这是因为JSON表示法是在1999年而不是2002年asp.net即该年发布)之后指定的。所以我想他们不知道serialize

开玩笑

听到这个词serialization,首先想到的就是将数据转换为字节,在这里JSON.stringify非常有意义,因为它将对象转换为字符串表示形式而不是字节表示形式。

PS:

@Chase Florell,您不能只添加JSON.serialize,因为在严格模式下,此代码实际上可能在某些浏览器中失败。

因为JSON是不是你的平均对象。


我想(以有限的经验),序列化某些东西一直是将其转换为某种形式的字符串用于平面文件存储。我明白你的意思了。
Chase Florell 2012年

我认为这是2001年..看到维基百科。这个名字可能是道格拉斯·克罗克福德(Douglas Crockford)的个人偏爱。1999年是第三个ECMA标准问世的一年,JSON就是在该标准上建立的。
马丁·彼得

1
@ChaseFlorell从字面上看只是序列化是指将内存中的对象转换为串行连续的数据格式,以便可以原子地包含它,我相信一种更常见的实现方法是按字节表示,用于跨网络或其他方式发送。
Jimmy Hoffa 2012年

@avinashr,回复:您的PS:编辑... 这个小提琴似乎没有失败。您能解释一下“ JSON不是您的平均目标”吗?我不是在偷偷摸摸,只是不清楚你的意思。
Chase Florell 2012年

2
@ChaseFlorell是正确的-关于Javascript,JSON是有效Javascript对象的子集。请参阅我的答案,看一个简单的示例:所有有效的JSON是有效的Javascript对象/哈希,但并非所有的Javascript对象/哈希都是有效JSON。甚至是名称-JSON代表“ JavaScript Object Notation”。
Izkata 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.