JSON.stringify( )
是等同于序列化还是实质上的序列化,还是仅仅是序列化步骤中必要的一步?
换句话说,JSON.stringify( )
对于对象序列化来说是否足够但不是必要的?还是必要但不足够?或者对于 JavaScript 对象的序列化既不是必要的也不足够?
JSON.stringify( )
是等同于序列化还是实质上的序列化,还是仅仅是序列化步骤中必要的一步?
换句话说,JSON.stringify( )
对于对象序列化来说是否足够但不是必要的?还是必要但不足够?或者对于 JavaScript 对象的序列化既不是必要的也不足够?
序列化是将数据转换为可写入磁盘或通过网络传输的格式的行为(或者如果您想要的话,可以写在纸上)。通常,序列化会将对象转换为文本,但这并非必需,因为有几种序列化格式,例如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字符串的函数,我想这将使它成为丰田工厂。
虽然这是一个老问题,但以下信息可能对后人有用。
当然,你可以按任意方式进行串行化,包括任意数量的自定义方法,但JSON已成为一种越来越受欢迎的方法。
JSON最明显的好处是它以与JavaScript对象字面量相同的方式表示对象,尽管它略微不够灵活。然而,如果你可以用JavaScript表示普通数据,那么JSON就是一个很好的选择。
最重要的特点是,由于它表示对象以及数组,因此它可以表示相当复杂和分层的数据。
出于某种原因,JSON已经在将数据在服务器和浏览器之间传输时取代了XML成为首选的序列化方式。它非常有用,许多语言都包括自己的JSON函数(例如,PHP具有更好的命名json_encode
和json_decode
函数),一些现代数据库也是如此。我自己发现使用JSON函数在没有JavaScript的情况下将更复杂的数据结构存储在数据库的单个字段中非常方便。
简短的答案是,对于大多数数据(非二进制数据),它是序列化的足够步骤。然而,这并不是必需的,因为有替代方案。
另一方面,对二进制数据进行序列化就是另一回事了...
简短回答... 在我看来,序列化和字符串化是同一个意思。