JSON是一种数据格式,可以表示以下三种类型的值
- 简单值:字符串、数值、布尔值和null(不支持undefined)
- 对象:对象中的键值可以是简单值,也可以是对象等复杂类型值
- 数组:数组的元素值可以是任意类型
JSON字符串必须使用 双引号
JSON对象中的 属性名,必须加上双引号
JSON中 没有变量,因此对象和数组中不能存在变量
序列化和解析
使用JSON对象的stringify()
方法,将JS对象序列化为JSON字符串,该方法接受1个必选参数,即JS对象,以及2个可选参数,过滤器(数组或函数)和缩进的空格数(一个整数值)
使用JSON对象的parse()
方法,将JSON字符串解析为JS值,该方法接受1个必选参数,即JSON字符串,以及1个可选参数,即将在每个值对上调用的函数
var book ={
title:"javascript",
author:[
"wjz"
],
edition:3,
year:2011
};
var jsonText = JSON.stringify(book); //将对象转化为JSON字符串
// {"title":"javascript","author":["wjz"],"edition":3,"year":2011}
var bookCopy = JSON.parse(jsonText); //将JSON字符串转化为JS对象
//序列化时过滤结果
var jsonText = JSON.stringify(book,["title","edition"]); //序列化后的结果将只包含title和edition属性
// {"title":"javascript","edition":3}
var jsonText = JSON.stringify(book,function(key.value){
switch(key){
case "author":
return value.join(",");
case "year":
return 2018;
case "edition":
return 4;
default:
return value;
}
});
// {"title":"javascript","author":"wjz","edition":4,"year":2018}
//解析JSON字符串时,调用替换函数
var bookCopy = JSON.parse(jsonText,function(key,value){
if (key == "author"){
return "zjw";
}else{
return value;
}
});
还可以定义toJSON()
方法,返回自定义的JSON数据格式
var book ={
title:"javascript",
author:[
"wjz"
],
edition:3,
year:2011,
toJSON:function(){
return this.title;
}
};
var jsonText = JSON.stringify(book);
//"javascript"
- 序列化对象时,顺序:(1)如果存在toJSON对象,则调用该方法,否则返回对象本身。(2)如果提供了函数过滤器,则传入函数过滤器的值是第1步的返回值。(3)如果传入第3个参数,则执行相应的格式化