Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将XML解析为Javascript对象_Javascript_Jquery_Xml_Arrays_Json - Fatal编程技术网

将XML解析为Javascript对象

将XML解析为Javascript对象,javascript,jquery,xml,arrays,json,Javascript,Jquery,Xml,Arrays,Json,我使用PHP中的cURL通过Google API从Google电子表格中获取数据。使用AJAX HTTP请求(通过jQuery),我可以将所有数据拉入并将其放入一个数组,但由于标记看起来像脏JSON,我有点卡住了 我希望能够将数据作为JS对象引用,如下所示: alert(xml.feed.content.name); 示例代码: $.ajax({ type: "GET", url: GtargetURL, dataType: "xml", success: functi

我使用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=
<entry>
<content type='text'>relativeid: 4, name: test2, type:  teset3, multiples: yes, cat: yes</content>
</entry>
<entry>many more entries...</entry>
</feed>

我知道我可以用“手机”通话代替“列表”通话,但这更符合我的目的。

你可以这样做:在你的循环中

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');
相反

此外,对于附加到数组,应该使用

var foo = [];
foo.push('something');

不是每个循环都有一个变量i并递增它。

你的问题有两个部分:

  • 如何将XML转换为JSON
  • 如何将XML中几乎是JSON的文本转换为JSON
要将XML转换为JSON,您可以使用如下库

它变成

<animals>
     <dog>
          <name>Rufus</name>
          <breed>labrador</breed>
     </dog>
     <dog>
          <name>Marty</name>
          <breed>whippet</breed>
     </dog>
     <cat name="Matilda"/>
</animals>
然后,你可以按照《地狱鱼》的建议转

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

转换为JSON对象

参见本文?这个答案很好,也很简单,但不太管用。在这个提琴中,您可以看到“undefined”(未定义)弹出窗口:问题是字符串中仍然有空格,所以除了第一个键外,所有键都有前导空格。这就解决了。谢谢!结合xml到JSON插件,这将完成这项工作。非常感谢!顺便说一下,最好检查循环中键的开头是否有空格,而不是删除整个字符串的空格。您可能会收到包含带空格字符串的数据。请在回答中包含来自小提琴的相关代码。谢谢您的建议。我注意到另一个回答回答了我的问题,但你帮了我的忙。我最终使用了这个插件: