使用JavaScript将XML转换为JSON

发布于:2021-01-14 10:16:19

0

3492

0

JavaScript XML JSON XML转换为JSON

如果您在JSON上关注我,您就会知道我一直在使用Appcelerator Titanium开发超级机密的移动应用程序。体验非常棒:使用JavaScript创建易于编写,易于测试的本地移动应用程序很有趣。我的移动应用程序连接到许多社交网络API,其中一些仅提供XML响应。我的迷你“框架”使用JSON动态创建小部件,因此我需要一种将XML转换为JSON的方法。我发现了许多解决方案,但没有一个起作用。调整现有功能后,我发现了一个很好的解决方案。

JavaScript

重要的是要指出Titanium的Titanium.XML.DOMDocument对象实现DOM2级结构。这是神奇的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; };

我需要实现的主要更改是使用attributes.item(j)而不是使用attributes[j]我发现的大多数脚本。使用此功能,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>

成为具有以下结构的JavaScript对象是可行的:

{  "@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对象,但您认为合适。如果您想使用JSON字符串格式的JavaScript,可以编写以下代码:

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

此功能在允许我快速忽略XML并改用JSON时非常有用。当构造嵌套子节点的属性和数组时,该函数运行良好。保持方便;在某些时候,您可能需要将XML转换为JSON!