您好,登錄后才能下訂單哦!
這篇文章給大家分享的是有關(guān)JavaScript如何解析JSON及XML的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。
一、JSON
即JS對象標記(JavaScript Object Notation),是一種以JS聲明對象的方式組合的一串字符串。
JS可以按以下方式定義對象:
var obj = { id: 2 , name: ' n ' };
這樣就定義了對象 obj, 它有兩個公共屬性id和name,可以用 obj.id 的方式直接訪問其屬性值。
從服務(wù)器獲取數(shù)據(jù)時往往不止一個對象,這就需要用到對象數(shù)組,JS中對象數(shù)組可以用 [] 來定義,如下:
var objs = [{ id: 1 , name: ' n_1 ' }, { id: 2 , name: ' n_2 ' }]; alert(objs[ 0 ].id);
這樣就定義了對象數(shù)組 objs, 它包含兩個對象,可以用索引來訪問,如 objs[0] 將引用到第一個對象。
到這里你或許已經(jīng)想到服務(wù)器返回的字符串格式是怎樣的,但字符串畢竟是字符串,我們需要將其轉(zhuǎn)換為可以利用JS操作的變量。
這就用到 eval 函數(shù),請看下例:
var objs = eval( " [{ id: 1, name: 'n_1' }, { id: 2, name: 'n_2'}] " ); alert(objs[ 0 ].id); // return 1
好了,服務(wù)器端你只要以格式:[{ id: 1, name: 'n_1' }, { id: 2, name: 'n_2'}] 返回字符串,
在客戶端就可以利用 eval() 執(zhí)行返回的字符串,獲得對象數(shù)組。
以下用AJAX做一個簡單的例子。新建一個網(wǎng)站,在根目錄下添加一個一般處理程序(GetJson.ashx),代碼如下:
GetJson.ashx
<%@ WebHandler Language="C#" Class="GetJson" %>
using System;
using System.Web;
public class GetJson : IHttpHandler {
public void ProcessRequest (HttpContext context) {
string str = "[{id:1, name:'n_1'}, {id:2, name:'n_2'}]";
context.Response.ContentType = "text/plain";
context.Response.Write(str);
}
public bool IsReusable {
get {
return false;
}
}
}
在Default.aspx 文件中添加測試腳本:
< script type = " text/javascript " > function getJson() { // 在IE7下測試通過,IE6下必須創(chuàng)建 new ActiveXObject("MSXML2.XMLHTTP.6.0") var request = new XMLHttpRequest(); request.open( ' GET ' , ' GetJson.ashx ' ); request.onreadystatechange = function () { if (request.readyState == 4 && request.status == 200 ) { var objs = eval(request.responseText); alert(objs.length); // 2 alert(objs[ 0 ].id); // 1 alert(objs[ 1 ].name); // 'n_2' } } request.send( null ); } < / script>
再添加一個測試按鈕即可以看到效果:
<input type="button" value="GetJson" onclick="getJson();" />
二、XML
JS對XML的解析是基于DOM的,對HTML的DOM熟悉的話,解析XML就沒什么困難了。
注意:在Firefox中,解析器不會忽略空格,所以元素間的空格,F(xiàn)F一樣會認為是一個節(jié)點。
不過在我們用程序拼接XML的時候,一般不會出現(xiàn)節(jié)點間有空格的情況。
在根目錄下添加一個新的一般處理程序(GetXml.ashx),代碼如下:
在Default.aspx頁面添加以下腳本:
function getXml() { // 在IE7下測試通過,IE6下必須創(chuàng)建 new ActiveXObject("MSXML2.XMLHTTP.6.0") var request = new XMLHttpRequest(); request.open( ' GET ' , ' GetXml.ashx ' ); request.onreadystatechange = function () { if (request.readyState == 4 && request.status == 200 ) { var xmlDoc = request.responseXML; var root = xmlDoc.documentElement; var elements = root.getElementsByTagName( " Person " ); alert(elements.length); // 2 // elements[0].firstChild 引用到第一個Person節(jié)點的Id節(jié)點 // elements[0].firstChild.firstChild 引用到Id節(jié)點的文本節(jié)點 // 因為文本節(jié)點是元素節(jié)點的第一個子節(jié)點 alert(elements[ 0 ].firstChild.firstChild.nodeValue); // 1 alert(elements[ 1 ].lastChild.firstChild.nodeValue); // 'n_2' } } request.send( null ); }
注意到代碼段:var root = xmlDoc.documentElement;
主要是為了消除IE6和其他瀏覽器的兼容問題,在其他瀏覽器下,允許request.responseXML.getElementsByTagName("Person");
添加測試按鈕:
<input type="button" value="GetXml" onclick="getXml();" />
感謝各位的閱讀!關(guān)于“JavaScript如何解析JSON及XML”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。