首頁 後端開發 XML/RSS教程 詳細介紹JavaScript解析 JSON 及 XML的範例程式碼

詳細介紹JavaScript解析 JSON 及 XML的範例程式碼

Mar 09, 2017 pm 04:46 PM

   書寫AJAX的時候,常常需要解析從伺服器傳回的一串字串,這裡簡單介紹伺服器回傳字元的兩種格式,及JS對它們的解析方法。

  一、JSON

    即JS物件標記(JavaScript Object Notation),是一種以JS宣告物件的方式組合的一串字串。
    JS可以用以下方式定義物件:

var
 obj 
=
    {
        id: 
2
,
        name: 
'
n
'
    };
登入後複製


##    這樣就定義了物件obj, 它有兩個公共屬性和name,可以用obj.id 的方式直接存取其屬性值。

    從伺服器取得資料時往往不只一個對象,這就需要用到物件數組,JS中物件數組可以用[] 來定義,如下:

  
var
 objs 
=
 [{ id: 
1
, name: 
'
n_1
'
 }, { id: 
2
, name: 
'
n_2
'
}];
        alert(objs[
0
].id);
登入後複製


#    這樣就定義了對象數組objs, 它包含兩個對象,可以用索引來訪問,如objs[0] 將引用到第一個對象。

    到這裡你或許已經想到伺服器返回的字串格式是怎樣的,但字串畢竟是字串,我們需要將其轉換為可以利用JS操作的變數。
    這就用到eval 函數,請看下例:

 
var
 objs 
=
 eval(
"
[{ id: 1, name: 'n_1' }, { id: 2, name: 'n_2'}]
"
);
        alert(objs[
0
].id); 
//
 return 1
登入後複製


    好了,伺服器端你只要以格式:[{ id : 1, name: 'n_1' }, { id: 2, name: 'n_2'}] 傳回字串,

    在客戶端就可以利用eval() 執行傳回的字串,取得物件陣列。

    以下用AJAX做一個簡單的範例。新建一個網站,在根目錄下新增一個一般處理程序(GetJson.ashx),程式碼如下:


詳細介紹JavaScript解析 JSON 及 XML的範例程式碼詳細介紹JavaScript解析 JSON 及 XML的範例程式碼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下必须创建 new ActiveXObject("MSXML2.XMLHTTP.6.0")
            
var
 request 
=
 
new
 XMLHttpRequest();
            request.open(
&#39;
GET
&#39;
, 
&#39;
GetJson.ashx
&#39;
);
            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);
//
 &#39;n_2&#39;
                }
            }
            request.send(
null
);
        }
    
<
/
script>
登入後複製

再添加一个测试按钮即可以看到效果:

<input type="button" value="GetJson" onclick="getJson();" />
登入後複製

  二、XML

    JS对XML的解析是基于DOM的,对HTML的DOM熟悉的话,解析XML就没什么困难了。

    注意:在Firefox中,解析器不会忽略空格,所以元素间的空格,FF一样会认为是一个节点。
    不过在我们用程序拼接XML的时候,一般不会出现节点间有空格的情况。

    在根目录下添加一个新的一般处理程序(GetXml.ashx),代码如下:

    在Default.aspx页面添加以下脚本:

      
function
 getXml() {
            
//
 在IE7下测试通过,IE6下必须创建 new ActiveXObject("MSXML2.XMLHTTP.6.0")
            
var
 request 
=
 
new
 XMLHttpRequest();
            request.open(
&#39;
GET
&#39;
, 
&#39;
GetXml.ashx
&#39;
);
            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节点的Id节点
                    
//
 elements[0].firstChild.firstChild 引用到Id节点的文本节点
                    
//
 因为文本节点是元素节点的第一个子节点
                    alert(elements[
0
].firstChild.firstChild.nodeValue); 
//
 1
                    alert(elements[
1
].lastChild.firstChild.nodeValue);  
//
 &#39;n_2&#39;
                }
            }
            request.send(
null
);
        }
登入後複製


    注意到代码段:var root = xmlDoc.documentElement;

    主要是为了消除IE6和其他浏览器的兼容问题,在其他浏览器下,允许request.responseXML.getElementsByTagName("Person");

    添加测试按钮:

<input type="button" value="GetXml" onclick="getXml();" />
登入後複製

 

总结:从代码上很容易看出,解析JSON相对直观,在网络中需要传输的字符串也比较少,解析过程中也不需要考虑浏览器兼容问题。
     但JSON比较适合轻量级的数据交互,XML则比JSON多了一些特性,比如命名空间,还有更多的节点类型。


以上是詳細介紹JavaScript解析 JSON 及 XML的範例程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

能否用PowerPoint開啟XML文件 能否用PowerPoint開啟XML文件 Feb 19, 2024 pm 09:06 PM

XML檔可以用PPT開啟嗎? XML,即可擴展標記語言(ExtensibleMarkupLanguage),是一種廣泛應用於資料交換和資料儲存的通用標記語言。與HTML相比,XML更加靈活,能夠定義自己的標籤和資料結構,使得資料的儲存和交換更加方便和統一。而PPT,即PowerPoint,是微軟公司開發的一種用於創建簡報的軟體。它提供了圖文並茂的方

MySQL5.7和MySQL8.0的差別是什麼? MySQL5.7和MySQL8.0的差別是什麼? Feb 19, 2024 am 11:21 AM

MySQL5.7和MySQL8.0是兩個不同的MySQL資料庫版本,它們之間有以下一些主要差異:效能改進:MySQL8.0相對於MySQL5.7有一些效能改進。其中包括更好的查詢優化器、更有效率的查詢執行計劃產生、更好的索引演算法和平行查詢等。這些改進可以提高查詢效能和整體系統效能。 JSON支援:MySQL8.0引入了對JSON資料類型的原生支持,包括JSON資料的儲存、查詢和索引。這使得在MySQL中處理和操作JSON資料變得更加方便和有效率。事務特性:MySQL8.0引進了一些新的事務特性,如原子

PHP 數組轉 JSON 的效能最佳化技巧 PHP 數組轉 JSON 的效能最佳化技巧 May 04, 2024 pm 06:15 PM

PHP數組轉JSON的效能最佳化方法包括:使用JSON擴充和json_encode()函數;新增JSON_UNESCAPED_UNICODE選項以避免字元轉義;使用緩衝區提高循環編碼效能;快取JSON編碼結果;考慮使用第三方JSON編碼庫。

Jackson庫中註解如何控制JSON序列化和反序列化? Jackson庫中註解如何控制JSON序列化和反序列化? May 06, 2024 pm 10:09 PM

Jackson庫中的註解可控制JSON序列化和反序列化:序列化:@JsonIgnore:忽略屬性@JsonProperty:指定名稱@JsonGetter:使用獲取方法@JsonSetter:使用設定方法反序列化:@JsonIgnoreProperties:忽略屬性@ JsonProperty:指定名稱@JsonCreator:使用建構子@JsonDeserialize:自訂邏輯

深入了解PHP:JSON Unicode轉中文的實作方法 深入了解PHP:JSON Unicode轉中文的實作方法 Mar 05, 2024 pm 02:48 PM

深入了解PHP:JSONUnicode轉中文的實作方法在開發中,我們經常會遇到需要處理JSON資料的情況,而JSON中的Unicode編碼在一些場景下會為我們帶來一些問題,特別是當需要將Unicode編碼轉換為中文字元時。在PHP中,有一些方法可以幫助我們實現這個轉換過程,以下將介紹常用的方法,並提供具體的程式碼範例。首先,讓我們先來了解一下JSON中Un

如何使用 PHP 函數處理 XML 資料? 如何使用 PHP 函數處理 XML 資料? May 05, 2024 am 09:15 AM

使用PHPXML函數處理XML資料:解析XML資料:simplexml_load_file()和simplexml_load_string()載入XML檔案或字串。存取XML資料:利用SimpleXML物件的屬性和方法來取得元素名稱、屬性值和子元素。修改XML資料:使用addChild()和addAttribute()方法新增元素和屬性。序列化XML資料:asXML()方法將SimpleXML物件轉換為XML字串。實戰案例:解析產品饋送XML,提取產品信息,轉換並將其儲存到資料庫中。

PHP 數組轉 JSON 的快捷技巧 PHP 數組轉 JSON 的快捷技巧 May 03, 2024 pm 06:33 PM

PHP陣列可透過json_encode()函數轉換為JSON字串(例如:$json=json_encode($array);),反之亦可用json_decode()函數從JSON轉換為陣列($array=json_decode($json);) 。其他技巧還包括:避免深度轉換、指定自訂選項以及使用第三方程式庫。

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

See all articles