中文字幕一区二区人妻电影,亚洲av无码一区二区乱子伦as ,亚洲精品无码永久在线观看,亚洲成aⅴ人片久青草影院按摩,亚洲黑人巨大videos

使用JavaScript將XML轉(zhuǎn)換為JSON

發(fā)布于:2021-01-14 10:16:19

0

3605

0

JavaScript XML JSON XML轉(zhuǎn)換為JSON

如果您在JSON上關(guān)注我,您就會(huì)知道我一直在使用Appcelerator Titanium開發(fā)超級(jí)機(jī)密的移動(dòng)應(yīng)用程序。體驗(yàn)非常棒:使用JavaScript創(chuàng)建易于編寫,易于測(cè)試的本地移動(dòng)應(yīng)用程序很有趣。我的移動(dòng)應(yīng)用程序連接到許多社交網(wǎng)絡(luò)API,其中一些僅提供XML響應(yīng)。我的迷你“框架”使用JSON動(dòng)態(tài)創(chuàng)建小部件,因此我需要一種將XML轉(zhuǎn)換為JSON的方法。我發(fā)現(xiàn)了許多解決方案,但沒有一個(gè)起作用。調(diào)整現(xiàn)有功能后,我發(fā)現(xiàn)了一個(gè)很好的解決方案。

JavaScript

重要的是要指出Titanium的Titanium.XML.DOMDocument對(duì)象實(shí)現(xiàn)DOM2級(jí)結(jié)構(gòu)。這是神奇的XML到JSON代碼:

// Changes XML to JSON function xmlToJson(xml) {    // Create the return object  var obj = {};  if (xml.nodeType == 1) { // element   // do attributes   if (xml.attributes.length > 0) {   obj["@attributes"] = {};    for (var j = 0; j < xml.attributes.length; j++) {     var attribute = xml.attributes.item(j);     obj["@attributes"][attribute.nodeName] = attribute.nodeValue;    }   }  } else if (xml.nodeType == 3) { // text   obj = xml.nodeValue;  }  // do children  if (xml.hasChildNodes()) {   for(var i = 0; i < xml.childNodes.length; i++) {    var item = xml.childNodes.item(i);    var nodeName = item.nodeName;    if (typeof(obj[nodeName]) == "undefined") {     obj[nodeName] = xmlToJson(item);    } else {     if (typeof(obj[nodeName].push) == "undefined") {      var old = obj[nodeName];      obj[nodeName] = [];      obj[nodeName].push(old);     }     obj[nodeName].push(xmlToJson(item));    }   }  }  return obj; };

我需要實(shí)現(xiàn)的主要更改是使用attributes.item(j)而不是使用attributes[j]我發(fā)現(xiàn)的大多數(shù)腳本。使用此功能,XML如下所示:

<ALEXA VER="0.9" URL="davidwalsh.name/" HOME="0" AID="=">  <SD TITLE="A" FLAGS="" HOST="davidwalsh.name">   <TITLE TEXT="David Walsh Blog :: PHP, MySQL, CSS, Javascript, MooTools, and Everything Else"/>   <LINKSIN NUM="1102"/>   <SPEED TEXT="1421" PCT="51"/>  </SD>  <SD>   <POPULARITY URL="davidwalsh.name/" TEXT="7131"/>   <REACH RANK="5952"/>   <RANK DELTA="-1648"/>  </SD> </ALEXA>

成為具有以下結(jié)構(gòu)的JavaScript對(duì)象是可行的:

{  "@attributes": {   AID: "=",   HOME:  0,   URL: "davidwalsh.name/",   VER: "0.9",  },  SD = [   {    "@attributes": {     FLAGS: "",     HOST: "davidwalsh.name",     TITLE: A    },    LINKSIN: {     "@attributes": {      NUM: 1102     }    },    SPEED: {     "@attributes": {      PCT: 51,      TEXT: 1421     }    },    TITLE: {     "@attributes": {      TEXT: "David Walsh Blog :: PHP, MySQL, CSS, Javascript, MooTools, and Everything Else",     }    },   },   {    POPULARITY: {     "@attributes": {      TEXT: 7131,      URL: "davidwalsh.name/"     }    },    RANK: {     "@attributes": {      DELTA: "-1648"     }    },    REACH: {     "@attributes": {      RANK = 5952     }    }   }  ] }

從這里可以使用JavaScript對(duì)象,但您認(rèn)為合適。如果您想使用JSON字符串格式的JavaScript,可以編寫以下代碼:

// Assuming xmlDoc is the XML DOM Document var jsonText = JSON.stringify(xmlToJson(xmlDoc))

此功能在允許我快速忽略XML并改用JSON時(shí)非常有用。當(dāng)構(gòu)造嵌套子節(jié)點(diǎn)的屬性和數(shù)組時(shí),該函數(shù)運(yùn)行良好。保持方便;在某些時(shí)候,您可能需要將XML轉(zhuǎn)換為JSON!