Analyser XML en object Javascript

Je récupère les données d’une google spreadsheet via l’API Google à l’aide de cURL en PHP. En utilisant une requête HTTP AJAX (via jQuery), je peux extraire toutes les données et les insérer dans un tableau, mais comme la ressemble à un JSON sale, je suis un peu coincé.

J’aimerais pouvoir référencer les données en tant qu’object JS, comme ceci:

 alert(xml.feed.content.name); 

Exemple de code:

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

Exemple 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 ensortinges...  

Merci pour toute aide que vous pouvez offrir.

Pour ce que cela vaut, j’utilise ce format d’URL pour l’appel Google api:

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

Je sais que je peux faire un appel “cellulaire” au lieu d’un appel “liste”, mais cela convient mieux à mes besoins.

Vous pouvez faire quelque chose comme ceci: http://jsfiddle.net/GVUnF/ http://jsfiddle.net/rMMkD/1/ dans votre boucle.

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

Veuillez noter que

 var foo = new Array; 

n’est pas exactement idiomatique en javascript. Tu devrais utiliser

 var foo = []; 

au lieu.

Aussi, pour append à un tableau, vous devriez utiliser

 foo.push('something'); 

au lieu d’avoir une variable i et de l’incrémenter à chaque boucle.

Votre question comporte deux parties:

  • Comment transformer XML en JSON
  • Comment convertir du texte XML presque JSON en JSON

Pour transformer XML en JSON, vous pouvez utiliser une bibliothèque telle que http://www.thomasfrank.se/xml_to_json.html

Ça tourne

                Rufus          labrador                    Marty          whippet            

Dans

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

Ensuite, vous pouvez suivre la suggestion de TheShellfishMeme de tourner

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

Dans un object JSON