Entwicklertools · Syntaxkonverter
JSON zu XML: Stammelemente, Arrays und ungültige Tag-Namen
· Wie es funktioniert
json xml Datenformate
JSON kann ein bloßes Array mit Schlüsseln sein, die mit Ziffern beginnen oder Leerzeichen enthalten, was XML nicht zulässt. In diesem Beitrag werden die Entscheidungen erläutert, die ein Konverter über Wurzeln, Arrays und Namen treffen muss, damit Sie die Ausgabe vorhersagen können.
Das Array ohne Namen – ein JSON-Array der obersten Ebene, das zu einem Single-Root-Dokument XML werden muss, und das angezeigte Wrapper-Element
JSON kann mit `[1,2]` beginnen; XML kann nicht mit zwei Peer-Dokumentelementen beginnen. ToolAcre umschließt daher ein Root-Array mit dem ausgewählten Root-Namen und schreibt jedes Mitglied als wiederholtes `<item>`-Kind. Die Warnung nennt diese Konvention, da die Wrapper- und Elementnamen in der Quelle nicht vorhanden waren.
Die Auswahl von `numbers` ergibt ein Dokumentelement `<numbers>`, das zwei Elementelemente enthält. Die Konvertierung ist deterministisch, aber nicht kanonisch: Ein anderes System erfordert möglicherweise `<number>` oder eine attributtragende Sammlung. Legen Sie den Root bewusst fest und vergleichen Sie das Ergebnis mit dem erforderlichen XML-Vertrag des Empfängers.
XML benötigt genau einen Root – weshalb jede Konvertierung einen Root-Elementnamen erfindet oder nach ihm fragt
Ein XML-Dokument muss genau ein Stammelement haben. Ein JSON-Objekt mit genau einem gewöhnlichen Schlüssel der obersten Ebene kann diesen Schlüssel direkt verwenden. Ein Multi-Key-Objekt, Array, Skalar oder Null hat keinen einzigen bereitgestellten Namen, daher schließt der Autor es in `root` ein, es sei denn, der Benutzer gibt einen anderen zulässigen Namen an.
Die Wrapper-Regel wird vor der Serialisierung implementiert und als Warnung angezeigt. Es wird nicht von einem Schema erkannt und behauptet nicht, dass `<root>` eine Bedeutung für den Legacy-Dienst hat. Die Benennung der Hüllkurve ist Teil des Integrationsdesigns, während der Konverter nur eine wohlgeformte Struktur unter seiner eigenen Zuordnung garantiert.
Arrays haben kein XML-Äquivalent – sie wiederholen ein Element pro Element und wie Arrays von Skalaren und Arrays von Arrays dargestellt werden
Arrays werden zu wiederholten Elementen. Im Dokumentstamm verwenden Mitglieder `<item>` unter dem Wrapper. Innerhalb eines Objekts wird ein unter `line` gespeichertes Array zu wiederholten `<line>`-Geschwistern. Arrays von Objekten erzeugen wiederholte Elemente mit untergeordneten Feldern. Verschachtelte Arrays haben keine Domänennamen und erben die vom Builder erstellte generische Struktur.
Dadurch geht die Unterscheidung zwischen einem Array-Mitglied und einem Skalar mit demselben Elementnamen nach einem späteren XML-to-JSON-Lesen verloren. XML stellt Vorkommen bereit, keine unabhängige Array-Markierung. Wenn eine stabile Kardinalität wichtig ist, muss sie durch ein Schema oder eine Anwendungszuordnung bereitgestellt werden. Ein generischer Serialisierer kann dies nicht allein anhand von JSON-förmigen Elementnamen beweisen.
Schlüssel, die keine Elementnamen sein können – Namen, die mit einer Ziffer beginnen, Leerzeichen oder Satzzeichen enthalten oder mit „xml“ beginnen, und wie Konverter sie umbenennen oder maskieren
Die Übersicht schlägt vor, dass Konverter illegale Schlüssel umbenennen oder maskieren können. ToolAcre lehnt dies ausdrücklich ab. Ein Schlüssel mit einem Leerzeichen, einer, der mit einer Ziffer oder einem Bindestrich beginnt, oder einer, der mit den reservierten Buchstaben `xml` beginnt, löst `UNSUPPORTED_SHAPE` aus und benennt den fehlerhaften Pfad. Eine stille Umbenennung würde zu XML führen, das keinem vereinbarten Schema entspricht.
Gültige Namen können mit einem Buchstaben, einem Unterstrich oder einem Namespace-Präfix beginnen und nach dem Anfang Ziffern, Punkte, Unterstriche, Doppelpunkte und Bindestriche enthalten. Attributschlüssel verwenden `@` nur als JSON-Konvention; Der verbleibende Attributname muss die gleiche Prüfung bestehen. Benennen Sie den Quellschlüssel absichtlich um oder wählen Sie ein anderes Zielformat.
Schlüssel, die keine Elementnamen sein können, werden abgelehnt, niemals umbenannt oder maskiert
Zahlen und boolesche Werte werden als Elementtext serialisiert, sodass ihr Typ JSON nicht mehr durch XML deklariert wird. Der Standard-Reverse-Reader gibt folglich Zeichenfolgen zurück. Null hat hier keine XML-Darstellung: Es wird zu einem leeren Element, das nicht von einer leeren Zeichenfolge zu unterscheiden ist, und der Autor meldet, wie viele Werte diese Änderung erfahren haben.
Dies bedeutet, dass `{ "a": null, "b": "" }` zwei leere Elemente erzeugen kann, die gleichermaßen zurückgelesen werden. Es wäre falsch, diesen Roundtrip verlustfrei zu nennen. Die Attribute `#text` und `#cdata` bewahren die Strukturkonvention des Konverters, fügen jedoch kein allgemeines Typsystem XML hinzu.
-Typen werden zu XML-Text, während null zu einer zugelassenen Mehrdeutigkeit leerer Elemente wird
Verwenden Sie `{"order":{"@id":"A-7","customer":"Ada","line":[{"sku":"P1","qty":2},{"sku":"P2","qty":1}],"note":null}}`. Der einzelne Schlüssel `order` wird zum Stamm, `@id` wird zu einem Attribut, jedes Zeilenobjekt wird zu einem wiederholten `<line>` und null wird zu einem leeren `<note></note>` mit einer Warnung.
Lesen Sie die Ausgabe mit deaktivierter Inferenz zurück. Attribut-ID, Menge und Textwerte sind Zeichenfolgen und Zeile ist ein Array, da es zweimal vorkommt. Dies demonstriert die genaue unterstützte Umkehrung und macht gleichzeitig die verlorenen Null- und numerischen Typen verfügbar. Ein Empfangsauftragsschema erfordert möglicherweise andere Namen oder Reihenfolgen, was in diesem Beispiel nicht validiert wird.
Was dies nicht abdeckt – das Erstellen von XML, das mit einer bestimmten XSD oder einem Namensraum übereinstimmt, für den eine von Hand geschriebene Zuordnung erforderlich ist
Der Autor verwendet keine XSD, weist keine Namespace-URIs zu und entscheidet nicht über die Reihenfolge der Elemente aus einem Geschäftsschema. Es schreibt eine XML-Deklaration und gibt niemals einen DOCTYPE aus. Schlüssel, die Namespace-Präfixe enthalten, werden buchstäblich beibehalten, aber das ist keine Namespace-Auflösung oder ein Beweis dafür, dass das Präfix korrekt deklariert ist.
Das Generieren von XML, das von einem bestimmten Dienst akzeptiert wird, kann Attribute, Sequenzbeschränkungen, Auswahlgruppen und qualifizierte Namen erfordern. Verwenden Sie das aktuelle Schema oder die aktuelle Dokumentation, um diese Zuordnung zu erstellen. Eine generische Konvertierung eignet sich für Inspektionen und einfache datenzentrierte Dokumente und ist kein Ersatz für die vertragsbewusste Serialisierung.
Takeaway: Sagen Sie die Form voraus, bevor Sie sich darauf verlassen – und wie das Syntaxkonverter-Bedienfeld die XML-Struktur zeigt, die ein JSON-Dokument erzeugt
Prognostizieren Sie den Umschlag, die Artikelnamen und den Typverlust je nach Ergebnis. ToolAcre umschließt Werte, denen eine Wurzel fehlt, wiederholt Arrays, ordnet `@`-Schlüssel Attributen zu, ersetzt Null durch leeren Text und lehnt unzulässige Namen ab, anstatt Ersetzungen zu erraten. Jede nicht offensichtliche Änderung erscheint in Ausgaben oder Warnungen.
Testen Sie das kleinste Objekt, das ein Array der obersten Ebene, wiederholte Datensätze, Null, numerischen Text und einen umständlichen Schlüssel enthält. Eine Ablehnung ist ein nützlicher Beweis dafür, dass eine manuelle Zuordnung erforderlich ist. Eine erfolgreiche Datei muss noch vom tatsächlichen Empfänger validiert werden, da wohlgeformtes XML und schemagültiges XML unterschiedliche Ansprüche sind.
Nachdem der Empfänger eine Probe angenommen hat, fügen Sie eine Rückprüfung nur dort hinzu, wo erwartet wird, dass die Zuordnung erhalten bleibt. Attribute und wiederholte untergeordnete Elemente können gemäß der ToolAcre-eigenen Konvention einen Roundtrip durchführen, Null- und Skalartypen dagegen nicht. Durch das Aufzeichnen dieser Unterscheidung wird verhindert, dass ein erfolgreiches Happy-Path-Beispiel auf jedes Auftragsdokument verallgemeinert wird, das Ihre Integration möglicherweise erzeugt.