Gibt es ein XSLT- Äquivalent für JSON? Etwas, das es mir ermöglicht, Transformationen unter JSON wie XSLT in XML durchzuführen.
json
xslt
equivalent
language-comparisons
luvieere
quelle
quelle
Antworten:
Interessante Idee. Einige Suchanfragen bei Google ergaben einige interessante Seiten, darunter:
Hoffe das hilft.
quelle
XSLT-Äquivalente für JSON - eine Liste von Kandidaten (Tools und Spezifikationen)
Werkzeuge
Sie können XSLT für JSON mit dem Ziel von fn: json-to-xml verwenden .
Technische Daten:
quelle
Versuchen Sie es mit JOLT . Es ist eine in Java geschriebene JSON-zu-JSON-Transformationsbibliothek.
Es wurde speziell erstellt, weil wir das Spiel "JSON -> XML -> XSLT -> XML -> JSON" nicht spielen wollten und die Verwendung einer Vorlage für eine ausreichend komplexe Transformation nicht möglich ist.
quelle
jq - leichter und flexibler Befehlszeilen-JSON-Prozessor
Es ist nicht vorlagenbasiert wie XSLT, sondern prägnanter. zB zu extrahieren
name
undaddress
Felder in ein Array:[.name, .address]
Das Tutorial führt Sie durch ein Beispiel für die Transformation der JSON-API von Twitter (und das Handbuch enthält viele Beispiele).
quelle
.. | .attr_name?
was du suchst? (von stedolan.github.io/jq/manual/#RecursiveDescent: .. )XSLT unterstützt JSON unter http://www.w3.org/TR/xslt-30/#json
XML verwendet eckige Klammern für Trennzeichen, JSON Klammern, eckige Klammern, ... I. e. XMLs weniger Token-Erkennungsvergleiche bedeuten, dass es für die deklarative Transformation optimiert ist, während mehr Vergleiche, wie z. B. switch-Anweisungen, aus Geschwindigkeitsgründen eine spekulative Verzweigungsvorhersage voraussetzen, für die zwingender Code in Skriptsprachen nützlich ist. Als direkte Konsequenz möchten Sie für verschiedene Mischungen von halbstrukturierten Daten möglicherweise die Leistung von XSLT- und Javascript-Engines als Teil reaktionsfähiger Seiten bewerten. Bei vernachlässigbarer Datennutzlast funktionieren Transformationen möglicherweise genauso gut mit JSON ohne XML-Serialisierung. Die Entscheidung von W3 sollte auf einer besseren Analyse beruhen.
quelle
Ich habe kürzlich ein Tool gefunden, das ich für das Styling von JSON liebe: https://github.com/twigkit/tempo . Sehr einfach zu bedienendes Tool - meiner Meinung nach ist die Arbeit mit XSLT viel einfacher - es sind keine XPATH-Abfragen erforderlich.
quelle
Schauen Sie sich jsonpath-object-transform an
quelle
Zu sagen, dass mangelnde Werkzeuge auf mangelnde Notwendigkeit hindeuten, wirft nur die Frage auf. Das Gleiche könnte auf die Unterstützung von X oder Y unter Linux angewendet werden (Warum sollten Sie sich die Mühe machen, hochwertige Treiber und / oder Spiele für ein Betriebssystem einer solchen Minderheit zu entwickeln? Und warum sollten Sie auf ein Betriebssystem achten, für das große Spiele- und Hardwareunternehmen nicht entwickeln?). Wahrscheinlich verwenden die Leute, die XSLT und JSON verwenden müssten, eine etwas triviale Problemumgehung: JSON in XML umwandeln. Aber das ist nicht die optimale Lösung, oder?
Wenn Sie ein natives JSON-Format haben und es "wysywyg" im Browser bearbeiten möchten, ist XSLT eine mehr als angemessene Lösung für das Problem. Dies mit traditioneller Javascript-Programmierung zu tun, kann zu einem Ärgernis werden.
Tatsächlich habe ich einen "Steinzeit" -Ansatz für XSLT implementiert, bei dem Teilstring-Parsing verwendet wird, um einige grundlegende Befehle für Javascript zu interpretieren, z. B. das Aufrufen einer Vorlage, das Verarbeiten von untergeordneten Elementen usw. Die Implementierung einer Transformations-Engine mit einem JSON-Objekt ist sicherlich viel einfacher als Implementierung eines vollwertigen XML-Parsers zum Parsen des XSLT. Das Problem ist, dass Sie zum Verwenden von XML-Vorlagen zum Transformieren eines JSON-Objekts das XML der Vorlagen analysieren müssen.
Um ein JSON-Objekt mit XML (oder HTML oder Text oder was auch immer) zu transformieren, müssen Sie sorgfältig über die Syntax und die Sonderzeichen nachdenken, die Sie zur Identifizierung der Transformationsbefehle verwenden müssen. Andernfalls müssen Sie einen Parser für Ihre eigene benutzerdefinierte Vorlagensprache entwerfen. Nachdem ich diesen Weg gegangen bin, kann ich Ihnen sagen, dass er nicht schön ist.
Update (12. November 2010): Nachdem ich einige Wochen an meinem Parser gearbeitet habe, konnte ich ihn optimieren. Vorlagen werden zuvor analysiert und Befehle als JSON-Objekte gespeichert. Transformationsregeln sind auch JSON-Objekte, während der Vorlagencode eine Mischung aus HTML und einer Homebrew-Syntax ähnlich dem Shell-Code ist. Ich konnte ein komplexes JSON-Dokument in HTML umwandeln, um einen Dokumenteditor zu erstellen. Der Code enthält ungefähr 1 KB Zeilen für den Editor (für ein privates Projekt, daher kann ich ihn nicht freigeben) und ungefähr 990 Zeilen für den JSON-Transformationscode (einschließlich Iterationsbefehlen, einfachen Vergleichen, Aufruf von Vorlagen, Speichern und Auswerten von Variablen). Ich plane, es unter einer MIT-Lizenz zu veröffentlichen. Schreiben Sie mir eine E-Mail, wenn Sie sich beteiligen möchten.
quelle
Ich habe kürzlich meine eigene kleine Bibliothek darüber geschrieben, die versucht, so nah wie möglich zu bleiben
5.1 Verarbeitungsmodell (XSLT REC) https://www.w3.org/TR/xslt#section-Processing-Model
wie es möglich ist (wie ich es sowieso könnte), in ein paar Zeilen JavaScript-Code.
Hier sind einige nicht ganz triviale Anwendungsbeispiele ...
1. JSON-to-Some-Markup:
Geige: https://jsfiddle.net/YSharpLanguage/kj9pk8oz/10
(inspiriert von D.1 Document Example (XSLT REC) https://www.w3.org/TR/xslt#section-Document-Example )
wo dies:
... gibt:
und
2. JSON-zu-JSON:
Geige: https://jsfiddle.net/YSharpLanguage/ppfmmu15/10
wo dies:
... gibt:
3. XSLT vs. JavaScript:
Ein JavaScript-Äquivalent von ...
XSLT 3.0 REC Abschnitt 14.4 Beispiel: Gruppieren von Knoten basierend auf gemeinsamen Werten
(unter: http://jsfiddle.net/YSharpLanguage/8bqcd0ey/1 )
Vgl. https://www.w3.org/TR/xslt-30/#grouping-examples
wo...
... gibt:
4. JSONiq vs. JavaScript:
Ein JavaScript-Äquivalent von ...
JSONiq-Anwendungsfälle Abschnitt 1.1.2. Gruppieren von Abfragen für JSON
(unter: https://jsfiddle.net/YSharpLanguage/hvo24hmk/3 )
Vgl. http://jsoniq.org/docs/JSONiq-usecases/html-single/index.html#jsongrouping
wo...
... gibt:
Es ist auch nützlich, die Einschränkungen von JSONPath wrt zu überwinden. Abfragen gegen die Ahnenachse, wie durch diese SO-Frage (und sicherlich andere) aufgeworfen .
ZB, wie man den Rabatt eines Lebensmittels erhält, wenn man seine Marken-ID kennt, in
?
Eine mögliche Lösung ist:
... was gibt:
'HTH,
quelle
Da ist jetzt! Ich habe kürzlich eine Bibliothek erstellt, json-transforms , genau zu diesem Zweck:
https://github.com/ColinEberhardt/json-transforms
Es verwendet eine Kombination aus JSPath , einem auf XPath modellierten DSL und einem rekursiven Pattern-Matching-Ansatz, der direkt von XSLT inspiriert wurde.
Hier ist ein kurzes Beispiel. Gegeben das folgende JSON-Objekt:
Hier ist eine Transformation:
Welche Ausgabe die folgenden:
Diese Transformation besteht aus drei Regeln. Das erste passt zu jedem Auto, das von Honda hergestellt wird, sendet ein Objekt mit einer
Honda
Eigenschaft aus und passt dann rekursiv zusammen. Die zweite Regel vergleicht jedes Objekt mit einermaker
Eigenschaftmodel
und gibt dieyear
Eigenschaften und aus . Das Finale ist die Identitätstransformation, die rekursiv übereinstimmt.quelle
Als weitere neue Antwort auf eine alte Frage würde ich einen Blick auf DefiantJS vorschlagen . Es ist nicht ein XSLT - Äquivalent für JSON, es ist XSLT für JSON. Der Abschnitt "Vorlagen" der Dokumentation enthält dieses Beispiel:
quelle
Ich war der enormen Menge an JavaScript-Vorlagen-Engines und all ihren Inline-HTML-Vorlagen, verschiedenen Markup-Stilen usw. wirklich überdrüssig und habe beschlossen , eine kleine Bibliothek zu erstellen , die die XSLT-Formatierung für JSON-Datenstrukturen ermöglicht. In keiner Weise Raketenwissenschaft - es ist nur JSON, das in XML analysiert und dann mit einem XSLT-Dokument formatiert wird. Es ist auch schnell, nicht so schnell wie JavaScript-Template-Engines in Chrome, aber in den meisten anderen Browsern ist es mindestens so schnell wie die JS-Engine-Alternative für größere Datenstrukturen.
quelle
Ich benutze Camel Route Umarshal (xmljson) -> nach (xlst) -> Marschall (xmljson). Effizient genug (obwohl nicht 100% perfekt), aber einfach, wenn Sie bereits Camel verwenden.
quelle
JSONiq ist ein solcher Standard und Zorba eine Open-Source-C ++ - Implementierung. JSONiq kann auch als XQuery angesehen werden, wenn JSON als nativer Datentyp hinzugefügt wird.
quelle
Es ist sehr gut möglich, JSON mit XSLT zu konvertieren: Sie benötigen den JSON2SAX-Deserializer und den SAX2JSON-Serializer.
Beispielcode in Java: http://www.gerixsoft.com/blog/json/xslt4json
quelle
Yate ( https://github.com/pasaran/yate ) wurde speziell nach XSLT entwickelt, verfügt über JPath (ein natürliches XPath-Äquivalent für JS), kompiliert mit JavaScript und hat eine lange Tradition in der Produktion. Es ist praktisch undokumentiert, aber das Durchlesen von Proben und Tests sollte ausreichen.
quelle
JSLT kommt einem JSON-Äquivalent von XSLT sehr nahe. Es ist eine Transformationssprache, in der Sie den festen Teil der Ausgabe in JSON-Syntax schreiben und dann Ausdrücke einfügen, um die Werte zu berechnen, die Sie in die Vorlage einfügen möchten.
Ein Beispiel:
Es ist in Java zusätzlich zu Jackson implementiert.
quelle
Ich bin mir nicht sicher, ob dies notwendig ist, und für mich deutet ein Mangel an Werkzeugen auf einen Mangel an Bedarf hin. JSON wird am besten als Objekte verarbeitet (wie es in JS sowieso der Fall ist), und Sie verwenden normalerweise die Sprache der Objekte selbst, um Transformationen durchzuführen (Java für Java-Objekte, die aus JSON erstellt wurden, ebenso für Perl, Python, Perl, c #, PHP usw.) auf). Nur mit normalen Zuweisungen (oder setzen, erhalten), Schleifen und so weiter.
Ich meine, XSLT ist nur eine andere Sprache, und ein Grund dafür ist, dass XML keine Objektnotation ist und daher Objekte von Programmiersprachen nicht exakt passen (Impedanz zwischen hierarchischem XML-Modell und Objekten / Strukturen).
quelle
name
und zu extrahierenaddress
und sie in ein Array zu legen:[.name, .address]
Warum konvertieren Sie JSON nicht mit Mr. Data Coverter in XML , transformieren es mit XSLT und ändern es dann mit demselben wieder in JSON.
quelle
Ein funktionierendes Doodle / Proof of Concept eines Ansatzes zur Verwendung von reinem JavaScript zusammen mit dem bekannten und deklarativen Muster hinter den übereinstimmenden Ausdrücken und rekursiven Vorlagen von XSLT finden Sie unter https://gist.github.com/brettz9/0e661b3093764f496e36
(Ein ähnlicher Ansatz könnte für JSON gewählt werden.)
Beachten Sie, dass die Demo auch auf JavaScript 1.8-Ausdrucksschließungen basiert, um das Ausdrücken von Vorlagen in Firefox zu vereinfachen (zumindest bis die ES6-Kurzform für Methoden implementiert werden kann).
Haftungsausschluss: Dies ist mein eigener Code.
quelle
Ich habe vor langer Zeit einen Dom-Adapter für mein Jackson-basiertes JSON-Verarbeitungsframework geschrieben. Es verwendet die nu.xom-Bibliothek. Der resultierende Dom-Baum funktioniert mit den Funktionen Java xpath und xslt. Ich habe einige Implementierungsentscheidungen getroffen, die ziemlich einfach sind. Zum Beispiel wird der Wurzelknoten immer "Wurzel" genannt, Arrays gehen in einen alten Knoten mit li Unterelementen (wie in HTML) und alles andere ist nur ein Unterknoten mit einem primitiven Wert oder ein anderer Objektknoten.
JsonXmlConverter.java
Verwendungszweck:
JsonObject sampleJson = sampleJson(); org.w3c.dom.Document domNode = JsonXmlConverter.getW3cDocument(sampleJson, "root");
quelle
Ein noch nicht gegebener Ansatz besteht darin, einen Parser-Generator zu verwenden, um einen Parser in XSLT zu erstellen, der JSON analysiert und eine XML-Ausgabe erzeugt.
Eine Option, die auf den XML-Konferenzen häufig erwähnt wird, ist der ReX-Parser-Generator ( http://www.bottlecaps.de/rex/ ). Obwohl auf der Website völlig undokumentiert, sind Rezepte bei der Suche verfügbar.
quelle
Möglicherweise kann XSLT mit JSON verwendet werden. Verson 3 von XPath (3.1) XSLT (3.0) und XQuery (3.1) unterstützt JSON in gewisser Weise. Dies scheint in der kommerziellen Version von Saxon verfügbar zu sein und könnte irgendwann in der HE-Version enthalten sein. https://www.saxonica.com/html/documentation/functions/fn/parse-json.html
- -
Was ich von einer alternativen Lösung erwarten würde:
Ich möchte JSON eingeben können, um einen passenden Datensatz abzurufen, und JSON oder TEXT ausgeben.
Greifen Sie auf beliebige Eigenschaften zu und werten Sie die Werte aus
Unterstützung für bedingte Logik
Ich möchte, dass die Transformationsskripte außerhalb des Tools, textbasiert und vorzugsweise eine häufig verwendete Sprache sind.
Mögliche Alternative?
Ich frage mich, ob SQL eine geeignete Alternative sein könnte. https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
Es wäre schön, wenn das alternative Tool JSON und XML verarbeiten könnte https://docs.microsoft.com/en-us/sql/relational-databases/xml/openxml-sql-server verarbeiten könnte
Ich habe noch nicht versucht, die von mir verwendeten XSLT-Skripte in SQL zu konvertieren, oder diese Option noch nicht vollständig evaluiert, hoffe jedoch, sie bald genauer untersuchen zu können. Nur ein paar Gedanken bisher.
quelle