一、JSON.pares()
JSON通常用于与服务器交换数据。在接收服务器数据时一般是字符串。
我们可以使用JSON.parse()方法将数据转换为JavaScript对象。
JSON.parse(text[,revier])
//text:必须,一个有效的JSON字符串.
//revier:可选,一个转换结构的函数,将为对象的每个成员调用此函数
JSON解析实例:
例如我们从服务器接收了以下数据:
{"name":"runoob","alexa":1000,"site":"www.runoob,com"}
我们使用JSON.parse()方法处理以上数据,将其转换为jacaScript对象:
var obj=JSON.parse('{"name":"runoob","alexa":1000,"sites":“www.runoob.com”}');
解析完成后,我们就可以在网页上使用JSON数据了:
<p id="demo"></p>
<script>
var obj=JSON.parse('{"name":"runoob","alexa":1000,"sites":"www.runoob.com"}');
doucument.getElementById("demo").innerHTml=obj.name+":"+obj.site;
</script>
可以使用AJAX从服务器请求JSON数据,并解析为JavaScript对象
var xmlhttp=new XMLHTTpRequest();
xmlhttp.onreadystatechange==function(){
if(this.readyState==4&&this.status==200){
//获取的数据为JSON字符串
myobj=JSON.parse(this.responseText);
doucument.getElementById("demo").innerHTML=myobj.name;
}
};
xmlhttp.open("GET","/try/ajax/json_demo.txt",true)l
xmlhttp.send();
可以使用JSON.parse的第二个参数reviver,一个转换结果的函数,对象的每个成员调用此函数。
var text='{"name":"Runoob","initDate":"2013-12-14","site":"www.runoob.com"}';
var obj=JSON.parse(text,function(key,value){
if(key=="initDate"){
//new Date()中的参数格式可以是整数,也可以是字符串
//JSON不能存储Date对象,需要将其转换为字符串之后再将字符串转换为Date对象。
return new Date(value);
}else{
//返回的是属性名作为函数名后返回的值
return value;
}
});
doucument.getElementById("demo").innerHTML=obj.name+"创建日期"+obj.initDate;
解析函数:
JSON不允许包含函数,但你可以将函数作为字符串存储,之后再将字符串转换为函数。json数据中外面是单引号,里面是双引号。
var text='{"name":"Runoob","alexa":"function(){return 10000}","sites":"www.runoob.com"}';
var obj=JSON.parse(text);
//eval(String)只接受原始字符串作为参数,String中含有要计算的JavaScript表达式或要执行的语句。
obj.alexa=eval("("+obj.alexa+")()");
console.log(obj.alexa);//1000
二、JSON.stringfy()
再向服务器发送数据时,JSON,stringify()方法将javaScript对象转换为字符串。
JSON.stringify(value[,replacer[,space]])
//value: 要转换的JavaScript值(通常为对象或数组);
//replacer: 用于转换结果的函数或数组。
//space:可选,文本添加缩进,空格和换行符,如果space是一个数字,则返回值文本在每个级别缩进指定数目的空格,如果space大于10,则文本缩进10个空格,space也可以使用非数字,如:\t;
javaScript数组转换
var arr=["Goole","Runoob","Tanbao","Facebook"];
var myJSON=JSON.stringify(arr);
document.getElementById("demo").innerHTML=myJSON;
解析数据:
因为JSON不能存储Date对象,JSON.stringify(),会将所有的日期转换为字符串。
解析函数:
JSON不允许包含函数,JSON.stringify()会删除JavaScript对象的函数,包括key和value.
解决方法:可以在执行JSON.stringify()函数前将函数转换为字符串来避免以上问题。
var obj={"name":"Runoob","alexa":function(){return 1000;},"sites":"www.runoob.com"};
obj.alexa=obj.alexa.toString();//将函数转换为字符串。
var myON=JSON.stringify(obj);
三、JSON使用
JSON最常见的用法之一,是从web服务器上读取JSON数据(作为文件或作为HttpRequest),将JSON数据转换为javaScript对象,然后在网页中使用改数据。
下面使用字符串作为输入进行演示(而不是文件)
创建json数据
var text='{"sites":['+
'{"name":"我是谁","url":"www.runoob.com"},'+
'{"name":"我是我","url":"www.rsagd.com"},'+
'{"name":"我是你","url":"www.safga.com"} ]}';
JSON语法是jacaScript语法的子集,javaScript函数eval()可用于将JSON文本转换为javaScript对象,该函数可解析JSON文本,然后生成javaScript对象,必须把文本包围在括号中,这样才能避免语法错误;
var obj=eval("("+text+")");