json和xml相似,是一种存储和交换文本信息的语法,但相比xml更快、小、易解析。
json是纯文本的,具有层级结构,能够被JavaScript解析 --> JavaScript的eval()方法,可以通过ajax传输,具有“自我描述性”即人类能够读懂,没有结束标签。
用json处理的数据:
数据保存在类似于键值对的key:value中,key必须是字符串 --> “name”:”张三”,各个数据之间用逗号”,”分开,大括号保存对象”{}”,中括号”[]”保存数组。
{“age”:18}
{“name”:”张三”,”age”:18,”sex”:”男”} --> 等价于JavaScript中的name=”张三” age=18 sex=”男”
包含多个对象的数组(项目中数据封装进javabean返回):
{
“users”:[
{“name”:”张三”,”age”:18,”sex”:”男”},
{“name”:”李四”,”age”:18,”sex”:”男”},
{“name”:”王老五”,”age”:18,”sex”:”男”}
]
}
json支持布尔值:{“state”:true}
json支持null值:{“name”:null}
<script>
var user = [
{“name”:”张三”,”age”:18,”sex”:”男”},
{“name”:”李四”,”age”:18,”sex”:”男”},
{“name”:”王老五”,”age”:18,”sex”:”男”}
];
user[0].name; --> 获得user数组中的第一个对象的name值
user[2].sex=”女”; --> 将user数组中的第三个对象的sex的值设置为女
</script>
访问和修改嵌套的多层json对象可以一直用”.”逐层访问
删除对象属性:delete user[0].name;
<script>
var user ={
“name”:”李四”,
“age”:19,
“url”:[“biadu”,”google”,”taobao”,”jingdong”]
}
user.url[0]=”baidu”; --> 修改url数组中的第一个元素为“baidu”
delete user.age; --> 删除user对象的age属性
</script>
json数据使用JSON.parse()方法转化为JavaScript对象:
{“name”:”张三”,”age”:18}
var user = JSON.parse(‘{“name”:”张三”,”age”:18}’);转化后使用”.”读取对象的属性user.age
json不能存储Date()时间对象,要将对象转为字符串存储
JSON.parse()方法第二个参数(可省略)可以指定对象每个成员都调用一个函数
var test = ‘{“name”:”张三”,”age”:18,”createDate”:”2017-10-10”}’;
var obj = JSON.parse(text,function(key,value){
if(key = “createDate”){
return new Date(value); -->将符合时间格式的字符串转为时间对象
}else {
return value;
}
});
可以将函数以字符串的形式存储json中,但是这不建议。
使用JSON.stringify()方法可以把JavaScript对象转为字符串
<script>
var JSobj = {“name”:”张三”,”age”=18}; --> 生成一个JavaScript对象
var JSobj = {“name”:”张三”,”createDate”= new Date()}; --> 可以将时间日期转为字符串
var JSobj = [“name”,”age”,”createDate”]; --> 可以将数组转为字符串
var jsonString = JSON.stringify(JSobj); --> JavaScript对象转为字符串
</script>
JSON.stringify()方法会将json中的value位置的function(){}函数以及其对应的key一并删除