【问题标题】:Parse XML into Javascript Object将 XML 解析为 Javascript 对象
【发布时间】:2012-02-15 19:08:35
【问题描述】:

我正在使用 PHP 中的 cURL 通过 Google API 从 Google 电子表格中获取数据。使用 AJAX HTTP 请求(通过 jQuery)我可以将所有数据拉入并将其放入数组中,但由于 <content> 标记看起来像脏 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=
<entry>
<content type='text'>relativeid: 4, name: test2, type:  teset3, multiples: yes, cat: yes</content>
</entry>
<entry>many more entries...</entry>
</feed>

感谢您提供的任何帮助。

对于它的价值,我正在使用这种 URL 格式来调用 Google api:

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

我知道我可以进行“cell”调用而不是“list”调用,但这更适合我的目的。

【问题讨论】:

标签: javascript jquery xml arrays json


【解决方案1】:

你可以这样做: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 并在每个循环中递增它。

【讨论】:

  • 这个答案很好也很简单,但它不是很有效。在这个 Fiddle 你可以看到“未定义”弹出窗口:jsfiddle.net/ZspQr
  • 问题是字符串中仍然有空格,所以除了第一个键之外的所有键都有一个前导空格。 jsfiddle.net/rMMkD/1 这解决了它。
  • 谢谢!结合 xml to JSON 插件,这将完成这项工作。非常感谢!
  • 顺便说一句,最好检查循环内键的开头是否有空格,而不是为整个字符串删除它们。您可能会收到包含带空格的字符串的数据。
  • 请将小提琴中的相关代码作为答案的一部分。
【解决方案2】:

您的问题分为两部分:

  • 如何将 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 对象

【讨论】:

  • 感谢您的建议。我注意到其他回复回答了我的问题,但您提供了帮助。我最终使用了这个插件:fyneworks.com/jquery/xml-to-json
猜你喜欢
  • 2021-05-16
  • 2016-12-02
  • 1970-01-01
  • 2016-02-17
  • 2015-01-16
  • 2014-07-30
  • 2011-07-28
  • 2012-02-11
相关资源
最近更新 更多