1. JSON到底是什么?

json是一种数据格式,在前后端的数据交互中有较为广泛的应用。就好像中国通用普通话,国际交流通用英语一样。
但是,JSON这个数据跟任何编程语言都无关。只不过,这个数据的发明者再创造之处,发现JS中的对象的格式非常具有魅力,参考了js中的对象的格式,发明了一种叫JSON的数据。

JSON的作用:使用ajax进行前后台数据交换,移动端与服务端的数据交换
(json就是前后端数据的统一格式,有利于编写和解析)

2. JSON数据规则

(1) 必须是字符
(2) 基础格式参考js中的对象(array和object)
(3) 对象格式的key部分必须放在双引号中,单引号都不行
(4) 不允许出现没有意义的逗号
(5) 不允许出现函数、undefined、NaN、可以出现null
(6) 不允许出现单引号

例:(n为错,y为对)
	var json = {"name":"admin","age":18};   // n,违反了1
	var json = "{'name':'admin'}";          // n,违反了3
	var json = "['hello',123,true]";        // n,违反了6
	var json = `["hello",123,true]`;        // y
	var json = '{"name":"admin"}';          // y
	var json = '{"name":"admin",}';         // n,违反了4
	var json = '{"name":"admin","show":undefined}';  // n,违反了5
	var json = '[{"name":"admin"},{"name":"zhangsan"},]';   // n,违反了4
	var json = '[{"name":"admin"},{"name":"zhangsan"}]';   // y

以上是在js中表示的json

如何专门表示json:
有json文件,扩展名为:.json的文件
json文件自身的所有内容,默认就是字符
所以,在json文件中只需要严格符合2,3,4,5即可

3. 对象和JSON转换

3.1、对象转JSON

原始数据是对象,符合对象的规则,不符合对象的规则没法转换且JS会报错,程序压根就没法执行。转换结果数据是JSON,自己默认符合JSON的规则。

语法转换规则:JSON.stringify(对象)

例:
	var obj = {
			            name:"admin",
			            age:18,
			            sex:"男",
			            show:function(){},
			            a:undefined,
			            b:NaN,
			            c:null,
			        }
			
			        var str = JSON.stringify(obj);

注:因为json不识别函数,undefined,NaN,所以在强行转换之后,函数和undefined会被忽略,NaN被转成null

3.2、JSON转对象

原始数据是JSON,符合JSON的规则,转换结果数据是对象,自己默认符合对象规则

语法转换规则:JSON.parse(str)

例:(t为true,f为false)
 var str = `{"name":"root"}`;				// t
 var str = {"name":"admin","age":18};		//f 不是字符
 var str = "{'name':'admin'}";				//f  key要双引号包
 var str = "['hello',123,true]";				//f 不允许出现单引号
 var str = '["hello",123,true]';				// t
 var str = '{"name":"admin",}';			// f 出现多余逗号
 var str = '{"name":"admin","show":function(){}}';		// f 出现函数
 var str = '[{"name":"admin"},{"name":"zhangsan"}]';	//t
 var str = `{"name":'admin'}`;				// f 出现单引号
var o = JSON.parse(str);

注意:因为是将json转成对象,json本身是字符,不管怎么写,js都不报错。但是如何不符合json的规则,在转换过程中,json会报错。

实际中: 以上这些东西都是写在<script>中的,所以说JSON是js的原生内容,也就意味着js可以直接取出JSON对象中的数据,只要var 对象名称 = json格式对象,我们就在js中直接通过对象格式的名称来获取到对象中的数据,不需要解析