Existe-t-il un équivalent XSLT pour JSON? Quelque chose pour me permettre de faire des transformations sur JSON comme XSLT pour XML.
json
xslt
equivalent
language-comparisons
luvieere
la source
la source
Réponses:
Idée intéressante. Certaines recherches sur Google ont produit quelques pages intéressantes, notamment:
J'espère que cela t'aides.
la source
Équivalents XSLT pour JSON - une liste de candidats (outils et spécifications)
Outils
Vous pouvez utiliser XSLT pour JSON dans le but de fn: json-to-xml .
Spécifications:
la source
Essayez JOLT . Il s'agit d'une bibliothèque de transformation JSON en JSON écrite en Java.
Il a été créé spécifiquement parce que nous ne voulions pas jouer au jeu "JSON -> XML -> XSLT -> XML -> JSON", et l'utilisation d'un modèle pour toute transformation suffisamment complexe est impossible à maintenir.
la source
jq - processeur JSON en ligne de commande léger et flexible
Ce n'est pas basé sur un modèle comme XSLT, mais plus concis. par exemple pour extraire
name
etaddress
champs dans un tableau:[.name, .address]
Le didacticiel présente un exemple de transformation de l'API JSON de Twitter (et le manuel contient de nombreux exemples).
la source
.. | .attr_name?
ce que vous cherchez? (à partir de stedolan.github.io/jq/manual/#RecursiveDescent: .. )XSLT prend en charge JSON comme vu sur http://www.w3.org/TR/xslt-30/#json
XML utilise des crochets angulaires pour les jetons de délimitation, JSON utilise des accolades, des crochets, ... I. e. Moins de comparaisons de reconnaissance de jetons de XML signifient qu'il est optimisé pour la transformation déclarative, tandis que plus de comparaisons, comme une instruction switch, pour des raisons de vitesse supposent une prédiction de branche spéculative pour laquelle le code impératif dans les langages de script est utile. En conséquence directe, pour différentes combinaisons de données semi-structurées, vous souhaiterez peut-être comparer les performances des moteurs XSLT et javascript dans le cadre de pages réactives. Pour une charge utile de données négligeable, les transformations peuvent tout aussi bien fonctionner avec JSON sans sérialisation XML. La décision de W3 devrait être basée sur une meilleure analyse.
la source
J'ai récemment trouvé un outil que j'aime pour styliser JSON: https://github.com/twigkit/tempo . Outil très facile à utiliser - à mon avis, il est beaucoup plus facile de travailler avec XSLT - pas besoin de requêtes XPATH.
la source
Jetez un œil à jsonpath-object-transform
la source
Dire le manque d'outils suggère que le manque de besoins ne fait qu'engendrer la question. La même chose pourrait être appliquée à la prise en charge de X ou Y sous Linux (Pourquoi prendre la peine de développer des pilotes et / ou des jeux de qualité pour un système d'exploitation aussi minoritaire? Et pourquoi faire attention à un système d'exploitation pour lequel les grandes sociétés de jeux et de matériel ne développent pas?). Les personnes qui auraient besoin d'utiliser XSLT et JSON finiront probablement par utiliser une solution de contournement quelque peu banale: la transformation de JSON en XML. Mais ce n'est pas la solution optimale, n'est-ce pas?
Lorsque vous avez un format JSON natif et que vous souhaitez le modifier "wysywyg" dans le navigateur, XSLT serait une solution plus que adéquate au problème. Faire cela avec la programmation javascript traditionnelle peut devenir pénible.
En fait, j'ai implémenté une approche "âge de pierre" pour XSLT, en utilisant l'analyse de sous-chaîne pour interpréter certaines commandes de base pour javascript, comme appeler un modèle, traiter des enfants, etc. l'implémentation d'un analyseur XML à part entière pour analyser le XSLT. Le problème est que pour utiliser des modèles XML pour transformer un objet JSON, vous devez analyser le XML des modèles.
Pour transformer un objet JSON avec XML (ou HTML, ou texte ou autre), vous devez réfléchir soigneusement à la syntaxe et aux caractères spéciaux que vous devez utiliser pour identifier les commandes de transformation. Sinon, vous finirez par devoir concevoir un analyseur pour votre propre langage de création de modèles personnalisé. Ayant parcouru ce chemin, je peux vous dire que ce n'est pas joli.
Mise à jour (12 novembre 2010): Après quelques semaines de travail sur mon analyseur, j'ai pu l'optimiser. Les modèles sont analysés au préalable et les commandes sont stockées en tant qu'objets JSON. Les règles de transformation sont également des objets JSON, tandis que le code modèle est un mélange de HTML et d'une syntaxe homebrew similaire au code shell. J'ai pu transformer un document JSON complexe en HTML pour en faire un éditeur de document. Le code est d'environ 1K lignes pour l'éditeur (c'est pour un projet privé donc je ne peux pas le partager) et environ 990 lignes pour le code de transformation JSON (comprend les commandes d'itération, les comparaisons simples, l'appel de modèle, l'enregistrement et l'évaluation des variables). J'ai l'intention de le publier sous une licence MIT. Envoyez-moi un mail si vous souhaitez vous impliquer.
la source
J'ai écrit ma propre petite bibliothèque autour de cela, récemment, qui essaie de rester aussi proche de
5.1 Modèle de traitement (XSLT REC) https://www.w3.org/TR/xslt#section-Processing-Model
comme c'est possible (comme je pourrais de toute façon), en quelques lignes de code JavaScript.
Voici quelques exemples d'utilisation pas tout à fait triviaux ...
1. JSON-to-some-markup:
Violon: https://jsfiddle.net/YSharpLanguage/kj9pk8oz/10
(inspiré par l' exemple de document D.1 (XSLT REC) https://www.w3.org/TR/xslt#section-Document-Example )
où ce:
... donne:
et
2. JSON à JSON:
Violon: https://jsfiddle.net/YSharpLanguage/ppfmmu15/10
où ce:
... donne:
3. XSLT contre JavaScript:
Un équivalent JavaScript de ...
XSLT 3.0 REC Section 14.4 Exemple: regroupement de nœuds en fonction de valeurs communes
(à: http://jsfiddle.net/YSharpLanguage/8bqcd0ey/1 )
Cf. https://www.w3.org/TR/xslt-30/#grouping-examples
où...
... donne:
4. JSONiq contre JavaScript:
Un équivalent JavaScript de ...
Cas d'utilisation de JSONiq Section 1.1.2. Regroupement des requêtes pour JSON
(à: https://jsfiddle.net/YSharpLanguage/hvo24hmk/3 )
Cf. http://jsoniq.org/docs/JSONiq-usecases/html-single/index.html#jsongrouping
où...
... donne:
Il est également utile de surmonter les limitations de JSONPath wrt. interroger contre l'axe des ancêtres, comme soulevé par cette question SO (et certainement d'autres).
Par exemple, comment obtenir la remise d'un article d'épicerie en connaissant son identifiant de marque, en
?
Une solution possible est:
... qui donne:
«HTH,
la source
Il y a maintenant! J'ai récemment créé une bibliothèque, json-transforms , exactement à cet effet:
https://github.com/ColinEberhardt/json-transforms
Il utilise une combinaison de JSPath , une DSL sur le modèle de XPath et une approche de correspondance de modèle récursive, directement inspirée de XSLT.
Voici un petit exemple. Étant donné l'objet JSON suivant:
Voici une transformation:
Qui a produit les éléments suivants:
Cette transformation est composée de trois règles. Le premier correspond à toute automobile fabriquée par Honda, émettant un objet avec une
Honda
propriété, puis correspondant récursivement. La deuxième règle fait correspondre tout objet avec unemaker
propriété, produisant les propriétésmodel
etyear
. La finale est la transformation d'identité qui correspond récursivement.la source
Comme encore une autre nouvelle réponse à une vieille question, je suggère un regard sur DefiantJS . Ce n'est pas un XSLT équivalent pour JSON, il est XSLT pour JSON. La section "Modèles" de la documentation inclut cet exemple:
la source
Je suis vraiment fatigué de l'énorme quantité de moteurs de création de modèles JavaScript et de tous leurs modèles HTML en ligne, de différents styles de balisage, etc., et j'ai décidé de créer une petite bibliothèque qui permet le formatage XSLT pour les structures de données JSON. Pas du tout sorcier - c'est juste JSON analysé en XML puis formaté avec un document XSLT. Il est également rapide, pas aussi rapide que les moteurs de modèles JavaScript dans Chrome, mais dans la plupart des autres navigateurs, il est au moins aussi rapide que l'alternative du moteur JS pour les structures de données plus volumineuses.
la source
J'utilise la route Camel umarshal (xmljson) -> vers (xlst) -> marshal (xmljson). Assez efficace (mais pas parfait à 100%), mais simple, si vous utilisez déjà Camel.
la source
JSONiq est une telle norme et Zorba une implémentation C ++ open source. JSONiq peut également être considéré comme XQuery avec l'ajout de JSON comme type de données natif.
la source
il est très possible de convertir JSON en utilisant XSLT: vous avez besoin du désérialiseur JSON2SAX et du sérialiseur SAX2JSON.
Exemple de code en Java: http://www.gerixsoft.com/blog/json/xslt4json
la source
Yate ( https://github.com/pasaran/yate ) est spécialement conçu après XSLT, dispose de JPath (un équivalent XPath naturel pour JS), se compile en JavaScript et a tout un historique d'utilisation en production. C'est pratiquement non documenté, mais la lecture des échantillons et des tests devrait suffire.
la source
JSLT est très proche d'un équivalent JSON de XSLT. Il s'agit d'un langage de transformation dans lequel vous écrivez la partie fixe de la sortie dans la syntaxe JSON, puis insérez des expressions pour calculer les valeurs que vous souhaitez insérer dans le modèle.
Un exemple:
Il est implémenté en Java sur Jackson.
la source
Je ne sais pas trop si cela est nécessaire, et pour moi le manque d'outils suggère le manque de besoin. JSON est mieux traité en tant qu'objets (comme c'est fait dans JS de toute façon), et vous utilisez généralement le langage des objets lui-même pour effectuer des transformations (Java pour les objets Java créés à partir de JSON, de même pour Perl, Python, Perl, c #, PHP, etc.) sur). Juste avec des affectations normales (ou set, get), en boucle et ainsi de suite.
Je veux dire, XSLT n'est qu'un autre langage, et l'une des raisons pour lesquelles il est nécessaire est que XML n'est pas une notation d'objet et que les objets des langages de programmation ne sont donc pas des ajustements exacts (impédance entre le modèle xml hiérarchique et les objets / structures).
la source
name
etaddress
, et les mettre dans un tableau:[.name, .address]
Pourquoi ne convertissez-vous pas JSON en XML à l'aide de Mr. Data Coverter , transformez-le en utilisant XSLT, puis changez-le en JSON en utilisant le même.
la source
Pour un doodle fonctionnel / preuve de concept d'une approche pour utiliser du JavaScript pur avec le modèle familier et déclaratif derrière les expressions correspondantes et les modèles récursifs de XSLT, voir https://gist.github.com/brettz9/0e661b3093764f496e36
(Une approche similaire pourrait être adoptée pour JSON.)
Notez que la démo s'appuie également sur les fermetures d'expressions JavaScript 1.8 pour faciliter l'expression des modèles dans Firefox (au moins jusqu'à ce que la forme abrégée ES6 pour les méthodes puisse être implémentée).
Avertissement: Ceci est mon propre code.
la source
J'ai écrit un adaptateur dom pour mon framework de traitement json basé sur jackson il y a longtemps. Il utilise la bibliothèque nu.xom. L'arbre dom résultant fonctionne avec les fonctionnalités java xpath et xslt. J'ai fait des choix d'implémentation qui sont assez simples. Par exemple, le nœud racine est toujours appelé "racine", les tableaux vont dans un nœud ol avec des sous-éléments li (comme en html), et tout le reste n'est qu'un sous-nœud avec une valeur primitive ou un autre nœud d'objet.
JsonXmlConverter.java
Usage:
JsonObject sampleJson = sampleJson(); org.w3c.dom.Document domNode = JsonXmlConverter.getW3cDocument(sampleJson, "root");
la source
Une approche non encore donnée consiste à utiliser un générateur d'analyseur pour créer un analyseur en XSLT qui analyse JSON et produit une sortie XML.
Une option qui est souvent mentionnée lors des conférences XML est le générateur d'analyseur ReX ( http://www.bottlecaps.de/rex/ ) - bien que totalement non documenté sur le site, des recettes sont disponibles sur la recherche.
la source
Il peut être possible d'utiliser XSLT avec JSON. Verson 3 de XPath (3.1) XSLT (3.0) et XQuery (3.1) prend en charge JSON d'une manière ou d'une autre. Cela semble être disponible dans la version commerciale de Saxon, et pourrait à un moment donné être inclus dans la version HE. https://www.saxonica.com/html/documentation/functions/fn/parse-json.html
-
Ce que j'attendrais d'une solution alternative:
Je voudrais pouvoir entrer JSON pour récupérer un ensemble de données correspondant et produire JSON ou TEXT.
Accéder à des propriétés arbitraires et évaluer les valeurs
Prise en charge de la logique conditionnelle
Je voudrais que les scripts de transformation soient externes à l'outil, basés sur du texte et de préférence une langue couramment utilisée.
Alternative potentielle?
Je me demande si SQL pourrait être une alternative appropriée. https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
Ce serait bien si l'outil alternatif pouvait gérer JSON et XML https://docs.microsoft.com/en-us/sql/relational-databases/xml/openxml-sql-server
Je n'ai pas encore essayé de convertir les scripts XSLT que j'utilise en SQL, ni évalué pleinement cette option pour le moment, mais j'espère y réfléchir plus rapidement. Juste quelques réflexions jusqu'à présent.
la source