可能有人看到这个标题就嘿嘿一笑,JSON我还不知道么!
虽然我们经常使用JSON,但是很多人还是容易混淆Javascript Object和JSON
JSON,是一种是一种轻量级的数据交换格式,他的全名是JavaScript Object Notation(JavaScript对象表示法),属于ES3标准的一个子集。
由于JSON的易用性,现在流行与各个领域出现了各种变体。在我们熟知的AJAX中,X所代表的XML基本已经被JSON代替。由于跨浏览器获取跨域数据JSONP也是非常好的一种解决方案。WEB开发中基本免不了要与JSON打交道。现实中很多人分不清楚什么是javascript object 什么是JSON。
1.JSON的格式非常严格,JSON与Object相比就想是html对xhtml。
一个标准的JSON数据
{"a":"1"}
JSON数据只能是纯文本!键和值都必须用(" ")双引包裹,js的Object 键可以不用这样处理,值如果不是字符串可以不这样处理。
//注意这些都不是JSON
{'a':1} {'a':'1'} {a:1}
2.既然JSON只能存储纯文本,对应js的就是字符串。那么我们要把js对象处理成为JSON的话怎么办呢。
其实每个JS的原生类都有(ES6 Function以添加)toString()这样的方法,能不能用么。复杂类型如果调用这个方法会返回自身的值
[1,2,3,4].toString(); //"1,2,3,4"
({a:1}).toString(); //"[object Object]"
使用这个会得到一个这样的结果,如果我们把他们存入cookie或者localStorage,再次取出对象化这显然不是正确结果。
JSON对象上有两个静态方法,parse stringify
parse:负责把JSON数据转为js对象
stringify:负责吧js对象字符串化
3.parse把字符串对象化有很多种选择 eval('('+data+')'), new Function('return '+data)();
鉴于安全性,推荐使用第二种方法
4. stringify把对象字符串化,目前还没有快速的方法,这个过程可以看做是[1,2,3,4] 给数组两边加双引。
5.JSON已被IE8所原生支持,低版本的浏览器也有解决方案。
https://github.com/douglascrockford/JSON-js/blob/master/json2.js
JSON之父,做的JSON扩展。JSON只能存储纯文本,局限性还是显而易见的。JSON的另一个变种BSON (Binary JSON),他支持JSON没有的一些数据类型,如Date和BinData类型,MongoDB使用他来存储数据和网络交换数据。
JSON校检:http://jsonlint.com/
JSON官网:http://json.org/json-zh.html