XML的代替者----JSON
更新時(shí)間:2007年07月21日 00:00:00 作者:
我個(gè)人覺得PHP與Javascript各有長(zhǎng)處,如果能完美的結(jié)合起來,那將創(chuàng)造出許許多多的奇跡! 我是初次寫此類文章,Bug難免,請(qǐng)各位指正~
現(xiàn)在AJAX應(yīng)用非常流行,而在AJAX中客戶端Javascript和服務(wù)端動(dòng)態(tài)腳本的通信是關(guān)鍵。如果傳輸?shù)男畔⒈容^簡(jiǎn)單,通常我們會(huì)直接采用字符串的方式,如果信息結(jié)構(gòu)復(fù)雜一點(diǎn),則通常用XML文檔。XML文檔雖然應(yīng)用廣泛,但是用php生成和用Javascript處理卻不是一件很容易的事情。這里我推薦一種XML文檔的比較好簡(jiǎn)化替代方案:JSON!
首先我們來了解一下Javascript的基礎(chǔ)知識(shí)。
1.創(chuàng)建數(shù)組,可以用JS內(nèi)建的類Array來初始化,也可以用JSON符號(hào)"[]"。下面通過兩種方式創(chuàng)建的arr1和arr2的實(shí)質(zhì)是一樣的:
var arr1 = new Array();
arr1[0] = "apple";
arr1[1] = "google";
arr1[2] = "longbill";
var arr2 = ["apple","google","longbill"];
注意,數(shù)組的索引也可以是字符串,如 arr1["name"] = "longbill"; 這時(shí)的數(shù)組就相當(dāng)于對(duì)象了。。。
2.創(chuàng)建對(duì)象,可以用JS內(nèi)建的類Object來初始化,也可以用JSON符號(hào)"{}"。下面通過兩種方式創(chuàng)建的obj1和ob2的實(shí)質(zhì)也是一樣的:
var obj1 = new Object();
obj1.name = "longbill";
obj1.age = 18;
var obj2 = { name:"longbill",age:18 };
注意,這里"{"和"}"之間必須寫成"鍵:值"的形式,而且不同的"鍵:值"之間要用","分割。 "鍵"中也可以包含空格等特殊字符,此時(shí)要用""(引號(hào))來引用,如 "phone number":123456
其實(shí)在JS中,數(shù)組的本質(zhì)是一個(gè)對(duì)象,對(duì)象本身也是一個(gè)數(shù)組。所以, obj1.name 和 obj1["name"] 是同一個(gè)引用。
我們還可以通過JSON符號(hào)的嵌套來定義復(fù)雜的S對(duì)象:
var people = [
{
name:"longbill",
age:18
},
{
name:"neal",
age:19
},
{
name:"glocklee",
age:17
}
];
//這個(gè)應(yīng)該看的懂吧~~
大部分XML文檔都可以用JSON來表達(dá):
<?xml version="1.0"?>
<root>
<book>
<name>Ju love</name>
<price>$15</price>
</book>
<book>
<name>Javascrip</name>
<price>$25</price>
</book>
</root>
如果用JSON就可以表達(dá)為:
{
root:
[
{
name:"Ju love",
price:"$15"
},
{
name:"Javascript",
price:"$25"
}
]}
是不是簡(jiǎn)化很多?
而且客戶端JS處理起來也很簡(jiǎn)單,只要用執(zhí)行字符串函數(shù) "eval" 就可以將JSON信息提取出來,而如果是XML文檔,那就不的不用大量的標(biāo)準(zhǔn)DOM操作來提取其中的數(shù)據(jù)。如:
//已經(jīng)用AJAX從服務(wù)端下載了一個(gè)JSON文件(字符串),保存在變量 json 里
eval("var myvar = "+json);
//這樣,JSON里的信息就表達(dá)在myvar這個(gè)變量里了。
缺點(diǎn):一旦JSON的格式錯(cuò)誤,將導(dǎo)致服務(wù)端JS系統(tǒng)錯(cuò)誤,甚至崩潰。
解決辦法:
最好在eval之前使用try(試探執(zhí)行),如
//已經(jīng)用AJAX從服務(wù)端下載了一個(gè)JSON文件(字符串),保存在變量 json 里
try {
eval("var myvar = "+json);
} catch(e) { alert('json syntax error!'); }
//這樣,即使JSON格式錯(cuò)誤,也只會(huì)彈出一個(gè)提示框,而不會(huì)拋出一個(gè)腳本錯(cuò)誤!
現(xiàn)在AJAX應(yīng)用非常流行,而在AJAX中客戶端Javascript和服務(wù)端動(dòng)態(tài)腳本的通信是關(guān)鍵。如果傳輸?shù)男畔⒈容^簡(jiǎn)單,通常我們會(huì)直接采用字符串的方式,如果信息結(jié)構(gòu)復(fù)雜一點(diǎn),則通常用XML文檔。XML文檔雖然應(yīng)用廣泛,但是用php生成和用Javascript處理卻不是一件很容易的事情。這里我推薦一種XML文檔的比較好簡(jiǎn)化替代方案:JSON!
首先我們來了解一下Javascript的基礎(chǔ)知識(shí)。
1.創(chuàng)建數(shù)組,可以用JS內(nèi)建的類Array來初始化,也可以用JSON符號(hào)"[]"。下面通過兩種方式創(chuàng)建的arr1和arr2的實(shí)質(zhì)是一樣的:
var arr1 = new Array();
arr1[0] = "apple";
arr1[1] = "google";
arr1[2] = "longbill";
var arr2 = ["apple","google","longbill"];
注意,數(shù)組的索引也可以是字符串,如 arr1["name"] = "longbill"; 這時(shí)的數(shù)組就相當(dāng)于對(duì)象了。。。
2.創(chuàng)建對(duì)象,可以用JS內(nèi)建的類Object來初始化,也可以用JSON符號(hào)"{}"。下面通過兩種方式創(chuàng)建的obj1和ob2的實(shí)質(zhì)也是一樣的:
var obj1 = new Object();
obj1.name = "longbill";
obj1.age = 18;
var obj2 = { name:"longbill",age:18 };
注意,這里"{"和"}"之間必須寫成"鍵:值"的形式,而且不同的"鍵:值"之間要用","分割。 "鍵"中也可以包含空格等特殊字符,此時(shí)要用""(引號(hào))來引用,如 "phone number":123456
其實(shí)在JS中,數(shù)組的本質(zhì)是一個(gè)對(duì)象,對(duì)象本身也是一個(gè)數(shù)組。所以, obj1.name 和 obj1["name"] 是同一個(gè)引用。
我們還可以通過JSON符號(hào)的嵌套來定義復(fù)雜的S對(duì)象:
var people = [
{
name:"longbill",
age:18
},
{
name:"neal",
age:19
},
{
name:"glocklee",
age:17
}
];
//這個(gè)應(yīng)該看的懂吧~~
大部分XML文檔都可以用JSON來表達(dá):
<?xml version="1.0"?>
<root>
<book>
<name>Ju love</name>
<price>$15</price>
</book>
<book>
<name>Javascrip</name>
<price>$25</price>
</book>
</root>
如果用JSON就可以表達(dá)為:
{
root:
[
{
name:"Ju love",
price:"$15"
},
{
name:"Javascript",
price:"$25"
}
]}
是不是簡(jiǎn)化很多?
而且客戶端JS處理起來也很簡(jiǎn)單,只要用執(zhí)行字符串函數(shù) "eval" 就可以將JSON信息提取出來,而如果是XML文檔,那就不的不用大量的標(biāo)準(zhǔn)DOM操作來提取其中的數(shù)據(jù)。如:
//已經(jīng)用AJAX從服務(wù)端下載了一個(gè)JSON文件(字符串),保存在變量 json 里
eval("var myvar = "+json);
//這樣,JSON里的信息就表達(dá)在myvar這個(gè)變量里了。
缺點(diǎn):一旦JSON的格式錯(cuò)誤,將導(dǎo)致服務(wù)端JS系統(tǒng)錯(cuò)誤,甚至崩潰。
解決辦法:
最好在eval之前使用try(試探執(zhí)行),如
//已經(jīng)用AJAX從服務(wù)端下載了一個(gè)JSON文件(字符串),保存在變量 json 里
try {
eval("var myvar = "+json);
} catch(e) { alert('json syntax error!'); }
//這樣,即使JSON格式錯(cuò)誤,也只會(huì)彈出一個(gè)提示框,而不會(huì)拋出一個(gè)腳本錯(cuò)誤!
相關(guān)文章
Json對(duì)象替換字符串占位符實(shí)現(xiàn)代碼
實(shí)現(xiàn)根據(jù)提供的Json對(duì)象去替換字符串中相應(yīng)的占位符。需要的朋友可以參考下。2010-11-11JSONP跨域GET請(qǐng)求解決Ajax跨域訪問問題
本文主要是介紹了JSONP跨域是如何實(shí)現(xiàn)的,并探討下JSONP跨域的原理。以及采用JSONP跨域GET請(qǐng)求解決Ajax跨域訪問問題,需要的朋友可以參考下2014-12-12使用JSON作為函數(shù)的參數(shù)的優(yōu)缺點(diǎn)
這篇文章主要介紹了使用JSON作為函數(shù)的參數(shù)的優(yōu)缺點(diǎn),需要的朋友可以參考下2016-10-10Jquery+asp.net后臺(tái)數(shù)據(jù)傳到前臺(tái)js進(jìn)行解析的方法
我們經(jīng)常用jquery讀取后臺(tái)數(shù)據(jù),后臺(tái)返回?cái)?shù)據(jù)。后臺(tái)數(shù)據(jù)格式就有很多了,但是js里面沒有什么類型之分2014-05-05Json對(duì)象與Json字符串互轉(zhuǎn)(4種轉(zhuǎn)換方式)
Json字符與Json對(duì)象的相互轉(zhuǎn)換方式有很多,接下來將為大家一一介紹下,感興趣的朋友可以參考下哈,希望可以幫助到你2013-03-03改進(jìn)版通過Json對(duì)象實(shí)現(xiàn)深復(fù)制的方法
改進(jìn)版通過Json對(duì)象實(shí)現(xiàn)深復(fù)制的方法,需要的朋友可以參考下2012-10-10