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?
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.
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);
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]
où content était le champ dans lequel je stockais mon xml.
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 !
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.
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).
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);
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
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);