Json学习笔记
一、含义
- Javascript Object Notation(Js对象表示法);
二、语法
- 简单值
//字符串或数值,如
5
"hello json"
//Js中的对象字面量
var person={
name:"Zhang",
age:22
}
//json对象
var person={
"name":"Zhang",
"age":22
}
//嵌套对象
var person2={
"name"="Zhang",
"school"={
"name":"NCEPU",
"city":"BeiJing"
}
var books=[
//元素0
{
"title": "Professional JavaScript",
"authors": [
"Nicholas C. Zakas"
],
edition: 3,
year: 2011
},
//元素1
{
"title": "Professional JavaScript",
"authors": [
"Nicholas C. Zakas"
],
edition: 2,
year: 2009
}
]
三、序列化
- 使用JOSN对象的stringify()方法
var book = {
title: "Professional JavaScript",
authors: [
"Nicholas C. Zakas"
],
edition: 3,
year: 2011
};
var jsonText=JSON.stringify(book);
var jsonText=JSON.stringify(book,["title","edition"]);
//输出:{"title":"Professional JavaScript","edition":3}
- 参数为函数
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;
}
});
//输出{"title":"Professional JavaScript","authors":"Nicholas C. Zakas","year":5000}
- 函数返回undifined,则删除该属性
var jsonText=JSON.stringify(book,null,4);
//缩进格式的JSON
- 用自定义字符缩进
var jsonText=JSON.stringify(book,null,"--");
// {
// --"title": "Professional JavaScript",
// --"authors": [
// ----"Nicholas C. Zakas"
// --],
// --"edition": 3,
// --"year": 2011
// }
- toJSON方法
- 如果对象中存在toJSON方法,序列化时只返回方法的内容
var book = {
"title": "Professional JavaScript",
"authors": [
"Nicholas C. Zakas"
],
edition: 3,
year: 2011,
toJSON: function(){
return this.title;
}
};
var jsonText = JSON.stringify(book);
// "Professional 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);
var bookCopy=JSON.parse(jsonText,function(key,value){
if(key=="releaseDate"){
return new Date(value);
}else{
return value;
}
}
- 函数返回undifined,则删除该属性