一、Json语法可以表示为以下三种类型的值
- 简单值(例如“Hello world”)
- 对象
对象如下:
var person = {
name:"@大司马",
age:29
};
对应的JSON表示法为:
{
name:"@大司马",
age:29
}
- 数组
数组表示方式为:
var values = [25,"hi",true];
Json表示:
[25,"hi",true]
二、解析与序列化
1.JSON对象
stringfy():Javascript对象序列化为JSON字符串;
parse():JSON字符串解析成原生JavaScript值
实例如下:
<script type="text/javascript">
var book = {
title:"Professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011
};
var jsonText = JSON.stringify(book);
console.log(jsonText);
console.log(JSON.parse(jsonText));
</script>
运行以上代码,结果如下:
2.序列化选项
除以上所述外,stringify()还可以接收另外两个参数,这两个参数用于指定以不同方式序列化JavaScript对象。
- 过滤结果:
数组过滤:
<script type="text/javascript">
var book = {
title:"Professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011
};
var jsonText = JSON.stringify(book,["title","edition"]);
console.log(jsonText);
//console.log(JSON.parse(jsonText));
</script>
返回结果如下:
函数过滤:
<script type="text/javascript">
var book = {
title:"Professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011
};
var jsonText = JSON.stringify(book,function(key,value){
switch(key){
case "authors":
return value.join(",")
case "year":
return 5000;
case "edition":
return undefined;
default:
return value;
}
});
console.log(jsonText);
//console.log(JSON.parse(jsonText));
</script>
返回结果如下:
字符串缩进
stringify的第三个参数用于控制结果中的缩进和空白符
当该参数为数值,表示每个级别缩进的空格数(最大值为10):
<script type="text/javascript">
var book = {
title:"Professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011
};
var jsonText = JSON.stringify(book,null,4);
console.log(jsonText);
//console.log(JSON.parse(jsonText));
</script>
得到结果如下:
当该参数为字符串时,则表示被用做缩进的字符(不再使用空格)
<script type="text/javascript">
var book = {
title:"Professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011
};
var jsonText = JSON.stringify(book,null,"--");
console.log(jsonText);
//console.log(JSON.parse(jsonText));
</script>
得到结果如下:
- 3.toJSON():
<script type="text/javascript">
var book = {
title:"Professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011,
toJSON:function(){
return this.title;
}
};
var jsonText = JSON.stringify(book);
console.log(jsonText);
//console.log(JSON.parse(jsonText));
</script>
得到结果如下:
3.解析选项
<script type="text/javascript">
var book = {
title:"Professional JavaScript",
authors:[
"Nicholas C. Zakas"
],
edition:3,
year:2011,
releaseDate: new Date(2011,11,1)
};
var jsonText = JSON.stringify(book);
console.log(jsonText);
var bookCopy = JSON.parse(jsonText,function(key,value){
if(key == "releaseDate"){
return new Date(value);
}else{
return value;
}
});
//console.log(JSON.parse(jsonText));
</script>
得到结果如下: