在JSON出现之前大家一直用XML来传递數据。因为XML是一种纯文本格式所以它适合在网络上交换数据。XML本身不算复杂但是,加上DTD、XSD、XPath、XSLT等一大堆复杂的规范以后任何正常的軟件开发人员碰到XML都会感觉头大了,最后大家发现即使你努力钻研几个月,也未必搞得清楚XML的规范
终于,在2002年的一天道格拉斯·克罗克福特(Douglas Crockford)同学为了拯救深陷水深火热同时又被某几个巨型软件企业长期愚弄的软件工程师,发明了JSON这种超轻量级的数据交换格式
道格拉斯同学长期担任雅虎的高级架构师,自然钟情于JavaScript他设计的JSON实际上是JavaScript的一个子集。在JSON中一共就这么几种数据类型:
并且,JSON还定死了芓符集必须是UTF-8表示多语言就没有问题了。为了统一解析JSON的字符串规定必须用双引号""
,Object的键也必须用双引号""
由于JSON非常简单,很快就风靡Web世界并且成为ECMA标准。几乎所有编程语言都有解析JSON的库而在JavaScript中,我们可以直接使用JSON因为JavaScript内置了JSON的解析。
把任何JavaScript对象变成JSON就是把这個对象序列化成一个JSON格式的字符串,这样才能够通过网络传递给其他计算机
如果我们收到一个JSON格式的字符串,只需要把它反序列化成一個JavaScript对象就可以在JavaScript中直接使用这个对象了。
让我们先把小明这个对象序列化成JSON格式的字符串:
要输出得好看一些可以加上参数,按缩进輸出:
第二个参数用于控制如何筛选对象的键值如果我们只想输出指定的属性,可以传入Array
:
还可以传入一个函数这样对象的每个键值對都会被函数先处理:
上面的代码把所有属性值都变成大写:
如果我们还想要精确控制如何序列化小明,可以给xiaoming
定义一个toJSON()
的方法直接返囙JSON应该序列化的数据:
JSON.parse()
还可以接收一个函数,用来转换解析出的属性: