一、简介
JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
JSON 是轻量级的文本数据交换格式
二、JSON与XML的区别
1、相同之处
JSON 是纯文本
JSON 具有"自我描述性"(人类可读)
JSON 具有层级结构(值中存在值)
JSON 可通过 JavaScript 进行解析
JSON 数据可使用 AJAX 进行传输
2、不同之处
没有结束标签
更短
读写的速度更快
能够使用内建的 JavaScript eval() 方法进行解析
可以使用数组
不使用保留字
三、为什么选择JSON
对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:
1、使用 XML:
读取 XML 文档
使用 XML DOM 来循环遍历文档
读取值并存储在变量中
2、使用 JSON:
读取 JSON 字符串
用 eval() 处理 JSON 字符串
四、JSON语法
JSON的值可以为:
1、数字(整数或浮点数)
2、字符串(在双引号中)
3、逻辑值(true 或 false)
4、数组(在中括号中)
5、对象(在大括号中)
6、null
五、JSON.stringiify()方法
作用:将 JavaScript 值转换为 JSON 字符串。
1、JSON.stringify() 会将所有日期转换为字符串。
var obj = { "name":"Runoob", "initDate":new Date(), "site":"www.runoob.com"};
//输出如下
{"name":"Runoob","initDate":"2020-10-17T08:34:11.337Z","site":"www.runoob.com"}
2、解析函数
JSON 不允许包含函数,JSON.stringify() 会删除 JavaScript 对象的函数,包括 key 和 value。
var obj = { "name":"Runoob", "alexa":function () {return 10000;}, "site":"www.runoob.com"};
//输出如下
{"name":"Runoob","site":"www.runoob.com"}
解决方法:可以在执行 JSON.stringify() 函数前将函数转换为字符串来避免以上问题的发生:
var obj = { "name":"Runoob", "alexa":function () {return 10000;}, "site":"www.runoob.com"};
obj.alexa = obj.alexa.toString();
var myJSON = JSON.stringify(obj);
3、其它注意事项
(1)布尔值、数字、字符串的包装对象在序列化过程中会自动转换成对应的原始值。
(2)undefined、任意的函数以及 symbol 值,在序列化过程中会被忽略(出现在非数组对象的属性值中时)或者被转换成 null(出现在数组中时)。函数、undefined 被单独转换时,会返回 undefined,如JSON.stringify(function(){}) or JSON.stringify(undefined).
(3)NaN 和 Infinity 格式的数值及 null 都会被当做 null。
JSON.stringify([new Number(1), new String("false"), new Boolean(false)]);
// '[1,"false",false]'
JSON.stringify({x: undefined, y: Object, z: Symbol("")});
// '{}'
JSON.stringify([undefined, Object, Symbol("")]);
// '[null,null,null]'
JSON.stringify({[Symbol("foo")]: "foo"});
// '{}'
JSON.stringify({[Symbol.for("foo")]: "foo"}, [Symbol.for("foo")]);
// '{}'
六、JSON.parse()方法
将一个 JSON 字符串转换为 JavaScript 对象。返回值为Object。
JSON.parse('{}'); // {}
JSON.parse('true'); // true
JSON.parse('"foo"'); // "foo"
JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]
JSON.parse('null'); // null