溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

JavaScript如何解析JSON及XML

發(fā)布時間:2021-07-27 11:11:03 來源:億速云 閱讀:243 作者:小新 欄目:編程語言

這篇文章給大家分享的是有關(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),代碼如下:

JavaScript如何解析JSON及XMLJavaScript如何解析JSON及XMLGetJson.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é)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責(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)容。

AI