文章目录
- JSON
- JSON 举例
- JSON 和 XML 对比
- JSON 对象
- 访问对象
- 循环对象
- 嵌套 JSON 对象
- 删除对象属性
- JSON 和 JavaScript 互相转换
- JSON.parse()
- 日期异常
- 解析函数
- JSON.stringify()
- 日期异常
- 解析函数
- JSON解析器
JSON
- 概述:JSON全称 JavaScript Object Notation,是一种轻量级的数据交换格式、是一种纯文本。JSON相对于XML来说读写的速度更快。
- 作用:
- JSON 是用于存储和传输数据的格式
- JSON 通常用于服务端向网页传递数据
- 语法规则
- 数据为 键/值 对,一个名称对应一个值,中间用 “:”
- 数据由逗号分隔
- 大括号保存对象,对象可以保存多个 键/值 对
- 方括号保存数组
- JSON值
- 数字(整数或浮点数)
- 字符串(双引号中)
- 逻辑值(true 或 false)
- 数组(在中括号中),数组中可包含多个对象
- 对象(在大括号中)
- null
- JSON 文件
- JSON 文件的文件类型是 .json
- JSON 文本的 MIME 类型是 application/json
JSON 举例
{"student":[ {"name":"张三","address":"河南","age":20}, {"name":"李四","address":"北京","age":25}, {"name":"王五","address":"上海","age":30} ]}
复制
student 是一个对象,里边有三条对象的信息
“name”:“张三” 等同于 JavaScript的 name=“张三”
// javascript 语法,等同于上述 json 案例 var student = [ {"name":"张三","address":"河南","age":20}, {"name":"李四","address":"北京","age":25}, {"name":"王五","address":"上海","age":30} ]; // 找到张三 student[0].name;
复制
JSON 和 XML 对比
- 概述:JSON 和 XML 都用于接收 web 服务端的数据
- XML 实例,和上述 JSON 实例等同
<student> <s> <name>张三</name> <address>河南</address> <age>20</age> </s> <s> <name>李四</name> <address>北京</address> <age>25</age> </s> <s> <name>王五</name> <address>上海</address> <age>30</age> </s> </student>
复制
- 不同之处
- JSON 不需要结束标签
- JSON 更加简短
- JSON 读写速度更快
- JSON 可以使用数组
- XML 需要使用 XML 解析器来解析,JSON 使用标准的 JavaScript 函数来解析。
JSON 对象
访问对象
-
方式一:使用 “.”
复制var student,username; student = {"name":"张三","address":"河南","age":30}; username = student.name; -
方式二:使用 “[]”
复制var student,username; student = {"name":"张三","address":"河南","age":30}; username = student["name"];
循环对象
- “for-in”来循环对象的属性
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p id="demo"></p> <script> // student 是一个对象 var student = {"name":"张三","address":"河南","age":30}; // 此时的 x 是代表的 键值 for(x in student){ document.getElementById("demo").innerHTML += x + "--" + student[x] + "<br>"; } </script> </body> </html>
复制
嵌套 JSON 对象
-
实例
复制student{ "name":"张三", "address":"河南", "technologys":{ "t1":"Java", "t2":"Python", "t3":"Go" } } -
访问
复制x = student.technologys.t1; // 或 x = student.technologys["t1"];
删除对象属性
-
使用 delete 关键字来删除 JSON 对象的属性
复制<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p id="demo"></p> <script> var student = { "name":"张三", "address":"河南", "technologys":{ "t1":"Java", "t2":"Python", "t3":"Go" } } // 删除 t3 这条数据 delete student.technologys.t3; // 此时 x 就是 代表 t1、t2,因为 t3 被删除了 for(x in student.technologys){ document.getElementById("demo").innerHTML += x + "--" + student.technologys[x] + "<br>"; } </script> </body> </html>
JSON 和 JavaScript 互相转换
- JSON.parse():将一个 JSON 字符串转换为 JavaScript 对象
- JSON.stringify():将 JavaScript 对象转换为 JSON 字符串
JSON.parse()
-
JSON 通常用于与服务端交换数据,在接收服务器数据时一般是字符串
-
语法
复制JSON.parse(text[,reviver]) text:必需,一个有效的 JSON 字符串
reviver:可选,一个转换结果的函数,将为对象的每个成员调用此函数
-
示例代码
复制<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p id="demo"></p> <script> var obj = JSON.parse('{"student":[\n' + ' {"name":"张三","address":"河南","age":20},\n' + ' {"name":"李四","address":"北京","age":25},\n' + ' {"name":"王五","address":"上海","age":30}\n' + ']}'); document.getElementById("demo").innerHTML = obj.student[0].name + ":" + obj.student[0].address; </script> </body> </html>
日期异常
- 概述:JSON 不能存储 Date 对象
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p id="demo"></p> <script> var text = '{"name":"张三","age":30,"address":"北京","createDate":"2024-01-01"}'; var obj = JSON.parse(text,function (key, value){ // 如果 key 等于 createDate 这个字符串,则返回日期对象 if(key == "createDate"){ return new Date(value); } else{ // 否则返回 字符串值 return value; } }); document.getElementById("demo").innerHTML = obj.name + "创建日期:" + obj.createDate; </script> </body> </html>
复制
解析函数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p id="demo"></p> <script> var text = '{"name":"清华大学","rank":"function(){return 1}","address":"北京"}'; var obj = JSON.parse(text); // 字符串转函数 obj.rank = eval("("+ obj.rank +")"); document.getElementById("demo").innerHTML = obj.name + "学校排名:" + obj.rank(); </script> </body> </html>
复制
注意:将 函数作为字符串存储,然后再将字符串转换为函数,eval 方法的使用可以往下看,下边有解释
JSON.stringify()
-
JSON 通常用于与服务端交换数据,在发送服务器数据时一般是字符串
-
语法
复制JSON.stringifg(value[,replacer[,space]]); value:必需,要转换的 JavaScript 值(通常为对象或数组)
replacer:可选,用于转换结果的函数或数组
space:可选,文本添加缩进、空格和换行符,space是数字,指定数目的空格
-
示例代码,对象转换
复制<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p id="demo"></p> <script> // 这是一个 JavaScript 对象 var obj = {"name":"张三","address":"河南","age":30}; // 转换成一个 JSON字符串 var s = JSON.stringify(obj); document.getElementById("demo").innerHTML = s; </script> </body> </html> -
示例代码,数组转换
复制<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p id="demo"></p> <script> var arr = [ {"name":"张三","address":"河南","age":30}, {"name":"李四","address":"湖北","age":35} ]; var s = JSON.stringify(arr); document.getElementById("demo").innerHTML = s; </script> </body> </html>
日期异常
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p id="demo"></p> <script> // 创建一个对象 var obj = {"name":"小哼","createDate":new Date(),"age":25}; // 对象转字符串 var s = JSON.stringify(obj); document.getElementById("demo").innerHTML = s; </script> </body> </html>
复制
注意:将对象转换成了字符串,可以利用parse再转成对象
解析函数
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p id="demo"></p> <script> var obj = {"name":"小哼","age":function (){return 25}}; // 函数转换字符串 obj.age = obj.age.toString(); var s = JSON.stringify(obj); document.getElementById("demo").innerHTML = s; </script> </body> </html>
复制
注意:函数转换字符串-使用 toString() 方法
JSON解析器
-
概述:eval() 函数可将 JSON 文本转换成 JavaScript 对象
-
语法
复制var obj = eval("(" + text + ")"); -
示例代码
复制<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <p id="demo"></p> <script> // JSON 文本 var text = '{"student":[\n' + ' {"name":"张三","address":"河南","age":20},\n' + ' {"name":"李四","address":"北京","age":25},\n' + ' {"name":"王五","address":"上海","age":30}\n' + ']}'; // 调用 eval 函数,将 JSON 字符串转换成 JavaScript 对象 var obj = eval("("+ text +")"); document.getElementById("demo").innerHTML += obj.student[0].name; document.getElementById("demo").innerHTML += obj.student[1].address; </script> </body> </html>