js中的json语法
JSON可以表示三种类型的值:
1,简单值:例如:1,'hello word';
javascript字符串与json字符串最大的区别在于,json字符串必须用双引号(单引号会导致语法错误)
2. 对象: 以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间运用 “,”(逗号)分隔。
例如json对象:
{"name":"a","age":1}
javascript对象:
var object={"name":"a","age":1} 或者var object={name:"a",age:1}
与javascript对象有两个不一样的地方,首先,没有声明变量(json中没有变量的概念)。其次,没有末尾的分号(因为这不是java语句,不需要分号)
3. 数组:是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间运用 “,”(逗号)分隔。
例如json数组: (数组对象结合起来的)
[{"name":"a","age":1},{"name":"b","age":2}]
javascript数组:var values=[15,"hi",true]对应的json数组:[15,"hi",true]
JSON对象:有两个方法stringify()和parse() ie7一下不支持json对象 但是json2.js 对此做了兼容 可以网上下载下
stringify():把javascript对象序列化为json字符串,简单点说就是把json对象转化成json字符串; stringify 接收两个三个参数,第二个参数可以是数组或者函数,第三个参数为缩进,最大数为10
例子:
//javascript 字面量对象 var box=[ { title:"a", num:1 }, { title:"b", num:2 } ]; var json=JSON.stringify(box) //一个参数 alert(json) // [{"title":"a","num":1},{"title":"b","num":2}] var json2=JSON.stringify(box,['title']) //第二个参数为数组 alert(json2) //[{"title":"a"},{"title":"b"}] var json3=JSON.stringify(box,function(key,value){//第二个参数为函数 函数接受两个参数 一个键和一个值 if(key=='title'){ return "mr."+value; //如果这里是返回undefined 表示删除tittle 运行结果里没有title }else{ return value; } }) alert(json3); //[{"title":"mr.a","num":1},{"title":"mr.b","num":2}] var json4=JSON.stringify(bok,null,4) //第三个参数为缩进 alert(json4)
stringify() 有时候无法满足序列化要求,在这些情况下可以给对象定义toJSON()方法,返回其自身的JSON数据格式
var box=[ { title:"a", num:1 }, { title:"b", num:2, toJSON:function () { return this.title; } } ];
var json=JSON.stringify(box)
alert(json) //[{"title":"a","num":1},"b"] b为返回当前title的值
parse():把json字符串解析为原生的javascript值,也就是说把json字符串转化成json对象;parse()也接受也个函数为参数,函数有两个参数,一个键和一个值
例子:
//将json字符串转换成json对象 var json='{"name":"ddm","age":27,"sex":"woman"}';var obj = JSON.parse(json); alert(obj.name) //ddm }
如果还原函数返回undefined ,则表示要从结果中删除相应的键,如果返回其他值,则将改值插入到结果中;
var box=[ { title:"a", num:1 }, { title:"b", num:2, releaseDate:new Date(2011,11,1) } ]; var json=JSON.stringify(box);//先序列化 var obj=JSON.parse(json,function(key,value){ //再转化成json对象 if(key=="releaseDate"){ return new Date(value); }
else if(key=='title'){
return undefined
}
else{ return value; } });
alert(obj[1].title) //undefined alert(obj[1].releaseDate.getFullYear()) //2011