将XML解析为Javascript对象

我正在使用PHP中的cURL通过Google API从Google电子表格中获取数据。 使用AJAX HTTP请求(通过jQuery)我可以将所有数据拉入并将其放入数组中,但由于标签看起来像脏JSON,我有点卡住了。

我希望能够将数据作为JS对象引用,如下所示:

 alert(xml.feed.content.name); 

示例代码:

 $.ajax({ type: "GET", url: GtargetURL, dataType: "xml", success: function parseMyXML(xml){ var Entries = new Array; var i = 0; $(xml).find("entry").each(function(){ var content = $(this).find("content").text(); Entries[i]=content; i++; }); var myArray= new Array(); myArray= Entries[1].split(","); alert (myArray[1]); // Result: "test2" } }); 

示例XML:

 <feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gsx=  relativeid: 4, name: test2, type: teset3, multiples: yes, cat: yes  many more entries...  

谢谢你尽你所能的帮助。

对于它的价值,我使用这种URL格式进行Google api调用:

 https://spreadsheets.google.com/feeds/list/KEY-ID-HERE/1/public/basic 

我知道我可以进行“小区”呼叫而不是“列表”呼叫,但这更适合我的目的。

你可以这样做: http//jsfiddle.net/GVUnF/ http://jsfiddle.net/rMMkD/1/在你的循环中。

 var jsonLikeString = "name:red, type:blue, multiples:green, cat:brown"; var jsObject = {}; var stringWithoutSpaces = jsonLikeString.split(' ').join(''); var splitStrings = stringWithoutSpaces.split(","); var kvPairArray = []; for(var i in splitStrings){ if(splitStrings.hasOwnProperty(i)){ var kvPair = splitStrings[i]; kvPairArray = kvPair.split(":"); jsObject[kvPairArray[0]] = kvPairArray[1]; } } alert(jsObject.cat); 

请注意

 var foo = new Array; 

在javascript中并不完全是惯用语。 你应该用

 var foo = []; 

代替。

另外,要附加到数组,您应该使用

 foo.push('something'); 

而不是有一个变量i,并在每个循环中递增它。

您的问题分为两部分:

  • 如何将XML转换为JSON
  • 如何将几乎是JSON的XML中的一些文本转换为JSON

要将XML转换为JSON,您可以使用像http://www.thomasfrank.se/xml_to_json.html这样的库

事实certificate

                Rufus          labrador                    Marty          whippet            

 {"animals": {"dog":[ {"name":"Rufus", "breed":"labrador"}, {"name":"Marty", "breed":"whippet"}], "cat": {"name":"Matilda"}}} 

然后你可以按照TheShellfishMeme的建议来转

 relativeid: 4, name: test2, type: teset3, multiples: yes, cat: yes 

进入JSON对象