web-dev-qa-db-de.com

Konvertieren Sie XML mit Hilfe von Javascript in JSON (und zurück)

Wie würden Sie von XML nach JSON und dann wieder nach XML konvertieren?

Die folgenden Tools funktionieren gut, sind jedoch nicht vollständig konsistent:

Hat jemand diese Situation schon einmal erlebt?

122
Jason Suárez

Ich denke, das ist das Beste: Konvertierung zwischen XML und JSON

Lesen Sie unbedingt den Begleitartikel auf der xml.com O'Reilly-Site , in dem die Probleme bei diesen Konvertierungen detailliert beschrieben werden. Die Tatsache, dass O'Reilly den Artikel hostet, sollte darauf hindeuten, dass Stefans Lösung von Nutzen ist.

86
Josh Stodola

https://github.com/abdmob/x2js - meine eigene Bibliothek (aktualisierte URL von http://code.google.com/p/x2js/ ):

Diese Bibliothek bietet XML für JSON (JavaScript Objects) und umgekehrt Javascript-Konvertierungsfunktionen. Die Bibliothek ist sehr klein und erfordert keine weiteren zusätzlichen Bibliotheken.

API-Funktionen

  • new X2JS () - um Ihre Instanz für den Zugriff auf alle Bibliotheksfunktionen zu erstellen. Sie können hier auch optionale Konfigurationsoptionen angeben
  • X2JS.xml2json - Konvertiert als DOM-Objekt angegebenes XML in JSON
  • X2JS.json2xml - Konvertieren Sie JSON in ein XML-DOM-Objekt
  • X2JS.xml_str2json - Konvertiert die als Zeichenfolge angegebene XML-Daten in JSON
  • X2JS.json2xml_str - Konvertiert JSON in eine XML-Zeichenfolge

Online-Demo auf 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

Diese Antworten haben mir sehr geholfen, diese Funktion zu erstellen:

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);
  }
}

So lange Sie ein Jquery-Objekt dom/xml übergeben: Für mich war das:

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

wo content war das Feld, in dem ich mein XML gespeichert habe.

18
Ryan Conrad

Ich würde dieses Tool persönlich empfehlen. Es ist ein XML-zu-JSON-Konverter.

Es ist sehr leicht und in reinem JavaScript. Es braucht keine Abhängigkeiten. Sie können die Funktionen einfach zu Ihrem Code hinzufügen und nach Belieben verwenden. 

Dabei werden auch die XML-Attribute berücksichtigt.

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”}}’

Hier ist eine Online-Demo !

2

Vor einiger Zeit schrieb ich dieses Tool https://bitbucket.org/surenrao/xml2json für meine TV-Watchlist-App. Ich hoffe, das hilft auch.

Synopsys: Eine Bibliothek, die nicht nur XML in Json konvertiert, sondern auch leicht zu debuggen ist (ohne Umlauffehler) und Json wieder in XML wiederherzustellen. Features: - Analysiere xml zu json object. Drucken Sie das Json-Objekt zurück in XML. Kann zum Speichern von XML in IndexedDB als X2J-Objekte verwendet werden. Json-Objekt drucken.

2
surya

Sie können CodVerters XML ​​für JSON und JSON für XML tools verwenden.
Es ist zwar online, aber sehr sicher. Alles, was Sie tun, wird auf Ihrem lokalen Computer interpretiert und niemals an den Server zurückgesandt (es handelt sich um ein eckiges SPA, daher erfolgt die Konvertierung durch reines Javascript). 
Die Überprüfungsfehlermeldungen sind informativ und genau.

(Full Disclosure: Ich bin einer der Entwickler).

Beispiel eines JSON-zu-XML-Konverters: enter image description here

Beispiel eines XML-zu-JSON-Konverters: enter image description here

1
jonathana

Haftungsausschluss: Ich habe geschrieben fast-xml-Parser

Schneller XML-Parser kann bei der Konvertierung von XML in JSON und umgekehrt helfen. Hier ist das Beispiel.

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);
}

Wenn Sie ein JSON- oder JS-Objekt in XML parsen möchten, dann

//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

Ich habe xmlToJson verwendet, um einen einzelnen Wert der XML zu erhalten.
Ich fand Folgendes viel einfacher (wenn die XML nur einmal vorkommt ..)

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

Hier 'Ein gutes Werkzeug aus einer dokumentierten und sehr bekannten npm-Bibliothek, das die Konvertierung von XML-Js sehr gut ausführt: Anders als einige (möglicherweise alle) der oben vorgeschlagenen Lösungen konvertiert es auch XML-Kommentare.

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

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