一、JSON的语法可以表示三个类型值:1.简单值 2.对象 3. 数组
二、JSON对象的表示方式
{
"name" : "Lee",
"age" : 100
}
ps:与JavaScript的对象字面量相比,JSON对象有三个不一样:1.JSON没有声明变量。 2.没有末尾的分号。3.对象的属性必须加双引号。
三、JSON数组的表示方式
[
{
"title":"www",
"authors": 1
},
{
"title":222,
"authors":2
},
{
"title":"ccc",
"authors":3
}
]
var box = '[{"name":"a","age":1},{"name":"b","age":2}]';
alert(box);//[{"name":"a","age":1},{"name":"b","age":2}]
四、JSON对象转换成JS对象: parse()方法
var json = JSON.parse(box);
alert(json);//[object object],[object object]
alert(box[0].title);
五、JS对象转换成JSON对象:stringify()
var box = [{name:"a",age:1},{name:"b",age:2}]; //JS对象 var json = JSON.stringify(box,['name','age'],4); alert(box);
var box1 = [
{
name:"a",
age:1,
height:160
},
{
name:"b",
age:2,
height:160
}
];
var json = JSON.stringify(box1);
console.log(json); //[{"name":"a","age":1,"height":160},{"name":"b","age":2,"height":160}]
stringify()有三个参数:1.过滤器 2.数组/函数 3.要JSON字符串中保留的缩进数
四、1.stringify()第二个参数,如果是数组,返回的是数组中的属性。
var json = JSON.stringify(box, ['name', 'age']);
console.log(json);//[{"name":"a","age":1},{"name":"b","age":2}]
四、1.第二个参数是函数:此函数有两个参数分别是key(对应json对象的属性,value对应属性的值)。根据属性(键)名可以知道应该如何处理要序列化的对象中的属性。属性名只能是字符串,而值并非键值对儿结构的值时,键名可以是空字符串。
var json2 = JSON.stringify(box,function(key,value){
if(key == "height"){
return value + "cm";
}
else{
return value;
}
});
console.log(json2);//[{"name":"a","age":1,"height":"160cm"},{"name":"b","age":2,"height":"160cm"}]
PS:火狐3.5和3.6在最初支持JSON的时候stringify方法有个小BUG,执行function会出错
PS:现在火狐的版本是17.0,所以3.5和3.6的市场份额可以忽略不计,没必要单独兼容
四、3.字符串缩进:第三个参数用于控制结果中的缩进和空白符。
参数是一个数字,它表示每个级别缩进的空格数。
var json3 = JSON.stringify(box, null, 4); alert(json3);
参数是一个字符串而非数值,这个字符串将在JSON字符串中被用作缩进字符(不再使用空格)。在使用字符串的情况下,可以将缩进字符设置为制表符,或者两个短划线之类的任意字符。
var json4 = JSON.stringify(box, null, "--");
alert(json4);
五、toJSON方法:使用toJSON方法实现stringify()不能实现的功能,toJSON()方法可以返回任何/指定序列化的值。
var test2 = [{
name:"cc",
age:26,
height:180,
toJSON:function(){
return this.name;
}
},
{
name:"bb",
age:28,
height:190,
toJSON: function () {
return this.name + "," + this.age;
}
},{
name:"aa",
age:30,
height:140,
toJSON:function (){
return this.height;
}
}]
var json5 = JSON.stringify(test2);
console.log(json5); //["cc","bb,28",140]
var book1 = {
"title":"mmms",
"authors":["ccc"],
edition:3,
year:2012,
releaseDate: new Date(2013, 11, 1)
};
var jsonText = JSON.stringify(book1);
var bookCopy = JSON.parse(jsonText, function(key, value){
if(key == "releaseDate"){
return new Date(value);
}else{
return value;
}
});
console.log(bookCopy.releaseDate.getFullYear()); //2013
var json = '[
{"title" : "a", "num" : 1},
{"title" : "b", "num" : 2}
]';
var box = JSON.parse(json, function (key, value) {
if (key == 'title') {
return 'Mr.' + value;
} else {
return value;
}
});
alert(box[1].title);
--------------------------------------------end-------------------------------------