發(fā)布于:2021-01-14 10:16:19
0
3605
0
如果您在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!
作者介紹
熱門博客推薦