web-dev-qa-db-fra.com

Conversion de XML en JSON (et inversement) à l'aide de Javascript

Comment convertiriez-vous XML en JSON, puis en XML?

Les outils suivants fonctionnent assez bien, mais ne sont pas complètement cohérents:

Quelqu'un at-il rencontré cette situation auparavant?

122
Jason Suárez

Je pense que c'est le meilleur: Conversion entre XML et JSON

Assurez-vous de lire le article d'accompagnement sur le site O'Reilly de xml.com , qui décrit en détail les problèmes liés à ces conversions, ce qui, je pense, vous éclairera. Le fait que O'Reilly héberge l'article devrait indiquer que la solution de Stefan est fondée.

86
Josh Stodola

https://github.com/abdmob/x2js - ma propre bibliothèque (URL mise à jour depuis http://code.google.com/p/x2js/ ):

Cette bibliothèque fournit du XML au JSON (objets JavaScript) et inversement des fonctions de conversion javascript. La bibliothèque est très petite et ne nécessite aucune autre bibliothèque supplémentaire.

Fonctions de l'API

  • new X2JS () - pour créer votre instance afin d’accéder à toutes les fonctionnalités de la bibliothèque. Aussi, vous pouvez spécifier des options de configuration facultatives ici
  • X2JS.xml2json - Convertit le XML spécifié en tant qu'objet DOM en JSON
  • X2JS.json2xml - Convertir un objet DOM JSON en XML
  • X2JS.xml_str2json - Convertit le XML spécifié en tant que chaîne en JSON
  • X2JS.json2xml_str - Convertit une chaîne JSON en XML

Démo en ligne sur http://jsfiddle.net/abdmob/gkxucxrj/1/

var x2js = new X2JS();
function convertXml2JSon() {
    $("#jsonArea").val(JSON.stringify(x2js.xml_str2json($("#xmlArea").val())));
}

function convertJSon2XML() {
    $("#xmlArea").val(x2js.json2xml_str($.parseJSON($("#jsonArea").val())));
}

convertXml2JSon();
convertJSon2XML();
$("#convertToJsonBtn").click(convertXml2JSon);
$("#convertToXmlBtn").click(convertJSon2XML);
40
abdolence

Ces réponses m'ont beaucoup aidé à réaliser cette fonction:

function xml2json(xml) {
  try {
    var obj = {};
    if (xml.children.length > 0) {
      for (var i = 0; i < xml.children.length; i++) {
        var item = xml.children.item(i);
        var nodeName = item.nodeName;

        if (typeof (obj[nodeName]) == "undefined") {
          obj[nodeName] = xml2json(item);
        } else {
          if (typeof (obj[nodeName].Push) == "undefined") {
            var old = obj[nodeName];

            obj[nodeName] = [];
            obj[nodeName].Push(old);
          }
          obj[nodeName].Push(xml2json(item));
        }
      }
    } else {
      obj = xml.textContent;
    }
    return obj;
  } catch (e) {
      console.log(e.message);
  }
}

Tant que vous passez dans un objet jQuery dom/xml: pour moi c’était:

Jquery(this).find('content').eq(0)[0]

content était le champ dans lequel je stockais mon xml.

18
Ryan Conrad

Je recommanderais personnellement cet outil . C'est un convertisseur XML vers JSON.

Il est très léger et est en JavaScript pur. Il n'a pas besoin de dépendances. Vous pouvez simplement ajouter les fonctions à votre code et l'utiliser comme vous le souhaitez. 

Il prend également en compte les attributs XML.

var xml = ‘<person id=”1234” age=”30”><name>John Doe</name></person>’;
var json = xml2json(xml); 

console.log(json); 
// prints ‘{“person”: {“id”: “1234”, “age”: “30”, “name”: “John Doe”}}’

Voici une démo en ligne !

2
Samuel Bourgault

Il y a quelque temps, j'ai écrit cet outil https://bitbucket.org/surenrao/xml2json pour mon application TV Watchlist, j'espère que cela aidera aussi.

Synopsys: une bibliothèque permettant non seulement de convertir xml en json, mais également de déboguer facilement (sans erreurs circulaires) et de recréer json au format xml. Caractéristiques: - Analyser xml pour json objet. Imprimez l'objet json en xml. Peut être utilisé pour enregistrer XML dans IndexedDB en tant qu’objets X2J. Imprimer un objet json.

2
surya

Vous pouvez utiliser les outils XML to JSON et JSON to XML de CodVerter.
Il est en ligne mais hautement sécurisé et tout ce que vous faites est interprété sur votre ordinateur local et n’est jamais renvoyé au serveur (il s’agit d’un SPA angulaire, d’où la conversion se fait par Javascript). 
Les messages d'erreur de validation sont informatifs et précis.

(Full Disclosure: Je suis l'un des développeurs).

Exemple de convertisseur JSON vers XML:enter image description here

Exemple de convertisseur XML en JSON:enter image description here

1
jonathana

Disclaimer: J'ai écrit fast-xml-parser

Fast XML Parser peut vous aider à convertir XML en JSON et inversement. Voici l'exemple.

var options = {
    attributeNamePrefix : "@_",
    attrNodeName: "attr", //default is 'false'
    textNodeName : "#text",
    ignoreAttributes : true,
    ignoreNameSpace : false,
    allowBooleanAttributes : false,
    parseNodeValue : true,
    parseAttributeValue : false,
    trimValues: true,
    decodeHTMLchar: false,
    cdataTagName: "__cdata", //default is 'false'
    cdataPositionChar: "\\c",
};
if(parser.validate(xmlData)=== true){//optional
    var jsonObj = parser.parse(xmlData,options);
}

Si vous voulez analyser un objet JSON ou JS en XML, alors

//default options need not to set
var defaultOptions = {
    attributeNamePrefix : "@_",
    attrNodeName: "@", //default is false
    textNodeName : "#text",
    ignoreAttributes : true,
    encodeHTMLchar: false,
    cdataTagName: "__cdata", //default is false
    cdataPositionChar: "\\c",
    format: false, 
    indentBy: "  ",
    supressEmptyNode: false
};
var parser = new parser.j2xParser(defaultOptions);
var xml = parser.parse(json_or_js_obj);
0
Amit Kumar Gupta

J'utilisais xmlToJson juste pour obtenir une valeur unique du xml.
J'ai trouvé qu'il était beaucoup plus facile de faire ce qui suit (si le xml n'apparaît qu'une fois ..)

let xml =
'<person>' +
  ' <id>762384324</id>' +
  ' <firstname>Hank</firstname> ' +
  ' <lastname>Stone</lastname>' +
'</person>';

let getXmlValue = function(str, key) {
  return str.substring(
    str.lastIndexOf('<' + key + '>') + ('<' + key + '>').length,
    str.lastIndexOf('</' + key + '>')
  );
}


alert(getXmlValue(xml, 'firstname')); // gives back Henk
0
Nebulosar

Here 'un bon outil issu d'une bibliothèque documentée et très célèbre de npm qui effectue très bien les conversions xml <-> js: contrairement à certaines (peut-être toutes) des solutions proposées ci-dessus, il convertit également les commentaires XML.

var obj = {name: "Super", Surname: "Man", age: 23};

var builder = new xml2js.Builder();
var xml = builder.buildObject(obj);
0
SimoneMSR