JSON.stringify与序列化的区别

26

JSON.stringify( ) 是等同于序列化还是实质上的序列化,还是仅仅是序列化步骤中必要的一步?

换句话说,JSON.stringify( ) 对于对象序列化来说是否足够但不是必要的?还是必要但不足够?或者对于 JavaScript 对象的序列化既不是必要的也不足够?


我想补充一点,JSON旨在表示JavaScript对象的一个子集,并且除了其自己特有的符号(不像JavaScript对象字面量那样灵活),它不包括函数属性,也就是所谓的方法。 - Manngo
3个回答

41

序列化是将数据转换为可写入磁盘或通过网络传输的格式的行为(或者如果您想要的话,可以写在纸上)。通常,序列化会将对象转换为文本,但这并非必需,因为有几种序列化格式,例如BitTorrent的bencoding和旧的/古老的标准asn.1格式,它们是二进制的。

JSON是一种基于文本的序列化格式,由于其简单性,目前非常流行。它不是唯一的序列化格式,其他流行的格式包括XML和CSV

由于其流行性和作为JavaScript对象文字语法起源,ES5引入了JSON.stringify()来从对象生成JSON字符串。以前,您必须使用库或编写递归下降解析器来完成工作。

那么,JSON.stringify()是否足以进行序列化?是的,如果您想要的输出格式是JSON。否则,如果您想要其他输出格式,例如XML或CSV或bencode,则不行。

JSON格式有一些限制。一个限制是JSON无法编码函数,因此JSON.stringify()在序列化时忽略函数/方法。JSON也无法编码循环引用。大多数其他序列化格式也具有此限制,但由于JSON看起来像JavaScript语法,因此有些人认为它可以执行JavaScript对象字面量所能做的操作。它不能。

因此,“JSON”和“序列化”之间的关系就像“Toyota Prius”和“汽车”的关系一样。JSON.stringify()只是生成JSON字符串的函数,我想这将使它成为丰田工厂。


slebetman,多么精彩的回答! - Ashique Desai

4

虽然这是一个老问题,但以下信息可能对后人有用。

当然,你可以按任意方式进行串行化,包括任意数量的自定义方法,但JSON已成为一种越来越受欢迎的方法。

JSON最明显的好处是它以与JavaScript对象字面量相同的方式表示对象,尽管它略微不够灵活。然而,如果你可以用JavaScript表示普通数据,那么JSON就是一个很好的选择。

最重要的特点是,由于它表示对象以及数组,因此它可以表示相当复杂和分层的数据。

出于某种原因,JSON已经在将数据在服务器和浏览器之间传输时取代了XML成为首选的序列化方式。它非常有用,许多语言都包括自己的JSON函数(例如,PHP具有更好的命名json_encodejson_decode函数),一些现代数据库也是如此。我自己发现使用JSON函数在没有JavaScript的情况下将更复杂的数据结构存储在数据库的单个字段中非常方便。

简短的答案是,对于大多数数据(非二进制数据),它是序列化的足够步骤。然而,这并不是必需的,因为有替代方案。

另一方面,对二进制数据进行序列化就是另一回事了...


-4

简短回答... 在我看来,序列化和字符串化是同一个意思。


好的,字符串是序列化数据,所以没错。 - user13087176

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接