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中直接通过对象格式的名称来获取到对象中的数据,不需要解析