JSON (JavaScript Object Notation) is a lightweight data-interchange format. It is easy for humans to read and write. It is easy for machines to parse and generate. It is based on a subset of the JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999. JSON is a text format that is completely language independent but uses conventions that are familiar to programmers of the C-family of languages, including C, C++, C#, Java, JavaScript, Perl, Python, and many others. These properties make JSON an ideal data-interchange language.
JSON is built on two structures:
1.***A collection of name/value pairs***. In various languages, this is realized as an object, record, struct, dictionary, hash table, keyed list, or associative array.
2.An ordered list of values. In most languages, this is realized as an array, vector, list, or sequence.
These are universal data structures. Virtually all modern programming languages support them in one form or another. It makes sense that a data format that is interchangeable with programming languages also be based on these structures.
这是官网上的原话,介绍了JSON的组成,看我加粗的斜体字,明确说明了JSON是轻量级的基于文本的数据传输格式。至于说JSON是JavaScript的子集,这个问题等一下再说。
1、基于文本
回想曾经写过的JSON,我们都是将内容用引号(下面说JSON的格式会说到)包裹然后以键值对的形式发送出去,也就是我们常说的JSON字符串,就是因为JSON 是基于文本格式的。
2、轻量级
现在比较流行的数据传输方式有XML和JSON。XML传输数据需要以标签对包裹,这样就会占据很多空间,也就更耗费带宽。通过上面的栗子可以看到,相同内容下JSON更轻量,占据的带宽会更小。可以想象,如果是大数据量的请求传递情况下JSON是更好的选择。
3、使用友好
JSON 还有一个优势,就是易读写(针对人),易解析(针对机器)。
举个栗子:
ajax向后台请求数据,后台解析后返回相应数据,简略流程如下:
1.前台构造一个JSON对象(有待探究),用于包装要传递的数据,然后将JS 对象转化为JSON字符串,再发送请求到后端。
2.后端PHP接收到这个字符串后,将JSON字符串转化为PHP对象,然后处理请求。
可以看到,数据在传递的过程中有三种不同的载体,一种是JSON对象,一种是JSON字符串,一种是PHP对象。其中JS对象和PHP对象是两个语言的东西,本是不能互通的,但是因为都是使用的JSON格式来传递和处理数据,都能把JSON这种数据格式很容易的转化为自己能理解的数据结构,这就使得交互成为可能。
综上所述,因为JSON轻量、基于文本(独立于语言)、人机友好,就使得JSON的应用越来越广泛。
二、JSON是JS对象的子集
与其说JSON是JS的子集不如说JSON是ECMAScript的子集,关于ECMAScript的内容可以看这里:专门针对JSON的内容
上面定义了JSON的格式要求:
现在回头看一开始的那段代码,简直是错误百出,键名加双引号、属性值不能是单引号,按理说这样不符合JSON格式要求的对象是不能被JSON识别并序列化的,可我们在控制台却看到了它的数据结果,这就是我们JSON函数的功劳了,下面慢慢说。
JSON只是我们数据交互的一种工具, 所以我们就不要再纠结于JSON的父类是谁了,只要理解它,用好它就ok啦。
三、JSON对象的原生函数
我们经常会用到的json函数有两个:JSON.stringify(data)和JSON.parse(data)。
1.序列化成json字符串的函数:JSON.stringify(data)
它的函数签名是这样的: