JSON是一个轻量级的数据格式,可以简化表示复杂数据结构的工作量。JSON使用JavaScript语法的子集表示对象、数组、字符串、数值、布尔值和null。
语法:
简单值
使用与JavaScript相同的语法,可以在JSON中表示字符串、数值、布尔值和null,但不支持JavaScript中的undefined
10
"Hello World!"
ps:JSON字符串必须使用双引号,单引号会报错
对象
JavaScript对象
var person = {
name: "xxx",
age: 18
};
JSON对象
{
"name": "xxx",
"age": 18
}
不同点:
1.JSON中不存在变量的概念
2.JSON末尾没有分号,它不是语句
3.JSON对象的属性必须加双引号
JSON中也可以嵌套对象
{
"name": "xxx",
"age": 18,
"school": {
"name": "xxx"
}
}
数组
JavaScript数组
var arr = [18,"Hello World!",true];
JSON数组
[18,"Hello World!",true]
将对象和数组结合起来,可以构成更复杂的数据集合
[
{
"xxx": "xxx",
"xxx": 18,
"xxx": [1,2,3],
"xxx": "xxx"
},
{
"xxx": "xxx",
"xxx": 18,
"xxx": [1,2,3],
"xxx": "xxx"
},
{
"xxx": "xxx",
"xxx": 18,
"xxx": [1,2,3],
"xxx": "xxx"
}
]
JOSN.stringify()和JOSN.parse()
stringify()将JavaScript对象序列化为JSON字符串
parse()将JSON字符串解析为原生JavaScript值
1.默认情况下,JOSN.stringify()输出的JSON字符串不包含任何空格字符或缩进
2.在序列化JavaScript对象时,所有函数和原型成员都会被忽略,值为undefined的任何属性也会被跳过
JOSN.stringify()可能用到的场景
1.判断数组中是否包含某对象
var data = [
{name:'admin'},
{name:'Cabu_husky'},
{name:'hbw'},
];
var val = {name:'Cabu_husky'};
console.log(JSON.stringify(data).indexOf(JSON.stringify(val)) !== -1); // true
2.让localStorage/sessionStorage可以存储对象
// 存
function setLocalStorage(key,val){
window.localStorage.setItem(key,JSON.stringify(val));
};
// 取
function getLocalStorage(key){
var val = JSON.parse(window.localStorage.getItem(key));
return val;
};
// 测试
setLocalStorage('demo',[1,2,3]);
var result = getLocalStorage('demo');
console.log(result); // [1,2,3]
3.对象深拷贝
function deepClone(data) {
var data = JSON.stringify(data),
dataClone = JSON.parse(data);
return dataClone;
};
var arr = [1,2,3],
arrClone = deepClone(arr);
arrClone[0] = 4;
console.log(arr,arrClone); // [1,2,3] [4,2,3]