2012-02-15 69 views
1

我使用PHP中的cURL通过Google API从Google电子表格中抓取数据。使用AJAX HTTP请求(通过jQuery)我可以将所有数据都拉入数组中,但由于<content>标记看起来像肮脏的JSON,所以我有点卡住了。将XML解析为Javascript对象

我想能够引用该数据作为一个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= 
<entry> 
<content type='text'>relativeid: 4, name: test2, type: teset3, multiples: yes, cat: yes</content> 
</entry> 
<entry>many more entries...</entry> 
</feed> 

由于为您提供的任何帮助。

对于它的价值,我使用这个URL格式为谷歌API调用:

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

我知道我可以做一个“细胞”所说的“名单”呼叫,而不是,但这个套装我的目的更好。

+0

看到这篇文章? http://stackoverflow.com/questions/1773550/xml-json-conversion-in-javascript – crush 2012-02-15 19:10:46

+0

如何:http://webapps.stackexchange.com/questions/11864/how-can-i-retrieve-records-from -a-google-spreadsheet-in-json-format – 2012-02-15 19:13:50

回答

2

你可以这样做: 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递增和它的每一个循环。

+0

这个答案很好很容易,但它不是很有效。在这个小提琴中,您可以看到“未定义”弹出窗口:http://jsfiddle.net/ZspQr/ – iammatthew2 2012-02-15 22:47:07

+0

问题在于字符串中仍有空格,因此除第一个键以外的所有键都有前导空格。 http://jsfiddle.net/rMMkD/1/这个修复了它。 – TheShellfishMeme 2012-02-15 23:38:39

+0

谢谢!结合一个XML到JSON插件,这将完成这项工作。非常感激! – iammatthew2 2012-02-15 23:42:33

3

有两个部分你的问题:

  • 如何将XML转换成JSON
  • 如何将在XML一些文字,几乎是JSON成JSON

为了使XML转换JSON您可以使用库如http://www.thomasfrank.se/xml_to_json.html

它变成

<animals> 
     <dog> 
          <name>Rufus</name> 
          <breed>labrador</breed> 
     </dog> 
     <dog> 
          <name>Marty</name> 
          <breed>whippet</breed> 
     </dog> 
     <cat name="Matilda"/> 
</animals> 

进入

{"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对象

+0

感谢您的建议。我注意到另一个回答回答了我的问题,但你帮了我一些忙。我结束了使用这个插件:http://www.fyneworks.com/jquery/xml-to-json/ – iammatthew2 2012-02-15 23:45:36

+0

@ iammatthew2然后你应该upvote我的回答:) – 2012-02-16 00:01:43