XSLT équivalent de JSON
Est-il un XSLT équivalent pour JSON? Quelque chose pour me permettre de faire des transformations sur JSON comme XSLT n'XML.
- Btw, de la langue/plate-forme serait-ce sur?
- XSLT est une norme qui a implémentations réelles dans de nombreuses langues et des plates-formes, mes questions sont les objectifs d'une entreprise semblable.
- Oui, mais s'il ne semble pas être le reflet exact de la réalité, il y a peut être applicable outils pour le sous-ensemble de langues qui pourraient les aider.
- +1 pour votre question. Beaucoup de gens semblent ignorer ou de la plaine de l'aversion XSLT, mais il peut être simplement une réaction XML de verbosité. Et en effet, comme XML diminue peu à peu hors de la faveur, il y a moins de possibilités d'utiliser XSLT, ce qui est dommage! Une transformation XSLT équivalent pour JSON serait génial.
- D'accord. Beaucoup de gens détestent XML, et donc d'avis de rejeter XSLT. Le XML de l'écosystème des outils est aussi lourd sur Java devs, qui détourne encore plus de gens. Mais j'étais à fond dans XSLT dans le milieu des années 2000, et il y a un énorme pouvoir qui n'a pas d'équivalent direct en dehors de l'XML de l'écosystème. Je voudrais amour JSON équivalent!
- Toutefois, une partie de ce qui a fait XSLT génial a d'autres XML normes qu'il a été construit sur. En particulier: (1) la capacité à valider un document XML avec un schéma (pas obligatoire, mais souvent utilisé), et (2) XPath, mon préféré plus langue pour naviguer dans les données des hiérarchies. Tout solide XSLT équivalents de JSON feraient bien de réfléchir à ces choses.
- voir jsfiddle.net/YSharpLanguage/kj9pk8oz/10 ou jsfiddle.net/YSharpLanguage/ppfmmu15/10 ou jsfiddle.net/YSharpLanguage/hvo24hmk/3
- L'OP peut raisonnablement s'attendre une personne en mesure de répondre à cette question, tout en sachant qu'un XSLT analogique devrait être construit sur un XPath analogique (bien que le XPath analogique ne serait pas nécessairement le nom de son propriétaire le chemin XPath n').
Vous devez vous connecter pour publier un commentaire.
Idée intéressante. Quelques recherches sur Google produit quelques pages d'intérêt, y compris:
Espère que cette aide.
Essayer SECOUSSE. C'est un JSON JSON transformation de la bibliothèque écrite en Java.
A été créée précisément parce que nous ne voulons pas jouer les "JSON -> XML -> XSLT -> XML -> JSON" en jeu, et à l'aide d'un modèle pour tout suffisamment complexes pour transformer est difficile à maintenir.
XSLT équivalents de JSON - une liste de candidats (les outils et les specs)
Outils
Vous pouvez utiliser XSLT pour JSON avec l'objectif de fn:json-à-xml.
Spécifications:
XSLT prend en charge JSON comme on le voit à http://www.w3.org/TR/xslt-30/#json
XML utilise les crochets angulaires de délimiteur, jetons, JSON en utilisant des accolades, crochets, ... I. e. XML est de moins en moins de jeton de reconnaissance des comparaisons signifie qu'il est optimisé pour déclarative de la transformation, tandis que plus de comparaisons, d'être comme l'instruction switch, pour des raisons de vitesse d'assumer spéculative direction de la prévision que l'impératif de code dans des langages de script est utile pour. Comme conséquence directe, pour les différents mélanges de données semi-structurées, vous souhaitez peut-être référence XSLT et javascript des moteurs de performance dans le cadre des pages pertinentes. Pour négligeable de la charge utile de données, des transformations qui pourrait fonctionner tout aussi bien avec JSON sans sérialisation XML. W3 décision devrait être fondée sur une meilleure analyse.
J'ai récemment trouvé un outil que j'aime pour le style de JSON: https://github.com/twigkit/tempo. Outil très simple à utiliser--à mon avis, il est beaucoup plus facile à travailler que XSLT--pas besoin de requêtes XPATH.
jq - léger et flexible de ligne de commande JSON processeur
Il 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]
La tutoriel promenades à travers un exemple de la transformation de Twitter API JSON (et le manuel a de nombreux exemples).
.. | .attr_name?
ce que vous recherchez? (à partir de stedolan.github.io/jq/manuel/#RecursiveDescent:..)Ont un coup d'oeil à jsonpath-objet de transformation de la
- À-dire l'absence d'outils suggèrent l'absence de besoin, c'est juste la mendicité la question. La même chose pourrait être appliqué sur le support pour X ou Y dans Linux (Pourquoi s'embêter à développer la qualité des pilotes et/ou des jeux pour une de ces minorités OS? Et pourquoi prêter attention à un OS que le gros gibier et les entreprises de matériel de ne pas le développer?). Probablement les personnes qui auraient besoin d'utiliser XSLT et JSON fin à l'aide d'un trivial solution de contournement: la Transformation du JSON en XML. Mais ce n'est pas la solution optimale, est-il?
Lorsque vous avez un natif format JSON et que vous souhaitez modifier "wysywyg" dans le navigateur, XSLT, serait plus que suffisant pour la solution du problème. Que faire avec les traditionnelles de programmation javascript peut devenir une douleur dans le cul.
En fait, j'ai mis en place un "âge de pierre" approche XSLT, à l'aide de sous-chaˆ ıne d'analyse pour interpréter quelques commandes de base pour javascript, comme appeler un modèle de processus d'enfants, etc. Certainement la mise en œuvre d'un moteur de transformation avec un objet JSON est beaucoup plus facile que la mise en œuvre d'un véritable analyseur XML parser le XSLT. Problème est, que d'utiliser des modèles XML à transformer un objet JSON vous avez besoin de parser le XML des modèles.
Pour transformer un objet JSON en XML (ou HTML, ou le texte, ou quoi que ce soit), vous devez réfléchir soigneusement à propos de la syntaxe et de ce que les caractères spéciaux que vous devez utiliser pour identifier les commandes de transformation. Sinon, vous finirez par avoir à la conception d'un analyseur syntaxique pour votre propre création de modèles de langue. Après avoir parcouru ce chemin, je peux vous dire que c'est pas joli.
Mise à jour (12 Novembre 2010): Après quelques semaines de travail sur mon analyse, j'ai pu l'optimiser. Les modèles sont analysées à l'avance et les commandes sont stockées sous forme d'objets JSON. Les règles de Transformation sont aussi des objets JSON, tandis que le modèle de code est un mélange de HTML et un homebrew syntaxe similaire à shell code. J'ai été en mesure de transformer un complexe document JSON en HTML pour faire un éditeur de documents. Le code est autour de 1K lignes pour l'éditeur (c'est pour un projet privé donc je ne peux pas la partager) et près de 990 lignes pour le JSON de transformation de code (comprend itération des commandes, des comparaisons simples, le modèle de l'appel, la variable de l'épargne et de l'évaluation). J'ai l'intention de le publier sous une licence MIT. Envoyez-moi un mail si vous désirez vous impliquer.
J'ai écrit ma propre petite bibliothèque autour de cette, récemment, qui tente de rester le plus près
5.1 Modèle de Traitement XSLT (REC)
https://www.w3.org/TR/xslt#section-Processing-Model
que possible (comme je pouvais de toute façon), en quelques lignes de code JavaScript.
Voici quelques pas complètement trivial exemples d'utilisation...
1. JSON-pour-certains-balisage:
Violon: https://jsfiddle.net/YSharpLanguage/kj9pk8oz/10
(inspiré par D. 1 Exemple de Document XSLT (REC) https://www.w3.org/TR/xslt#section-Document-Example)
où cette:
... donne:
et
2. JSON-à-JSON:
Violon: https://jsfiddle.net/YSharpLanguage/ppfmmu15/10
où cette:
... donne:
3. XSLT vs JavaScript:
Un JavaScript équivalent de...
XSLT 3.0 REC de la Section 14.4 Exemple: le 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 vs JavaScript:
Un JavaScript équivalent de...
JSONiq Cas D'Utilisation De La Section 1.1.2. Le groupement des Requêtes 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 pour surmonter les limitations de JSONPath wrt. d'interroger l'ancêtre de l'axe, comme soulevé par cette SORTE de question (et certainement d'autres).
E. g., comment faire pour obtenir l'escompte d'une épicerie élément de la connaissance de sa marque id, dans
?
Une solution possible est:
... ce qui donne:
'HTH,
Il est maintenant! J'ai récemment créé une bibliothèque, json transforme, exactement à cette fin:
https://github.com/ColinEberhardt/json-transforms
Il utilise une combinaison de JSPath, DSL calqué sur XPath, et récursive de la correspondance de motif approche, inspirée directement par XSLT.
Voici un exemple rapide. Compte tenu de l'objet JSON suivant:
Voici une transformation:
De sortie suivantes:
Cette transformation est composé de trois règles. La première correspond à une voiture qui est faite par Honda, émettant un objet avec un
Honda
de la propriété, puis, de manière récursive de correspondance. La deuxième règle correspond à n'importe quel objet avec unmaker
de la propriété, de la transmission de lamodel
etyear
propriétés. La finale est l'identité de les transformer de manière récursive les matchs.Encore une nouvelle réponse à une vieille question, je te suggère de regarder DefiantJS. Ce n'est pas une transformation XSLT équivalent de JSON, il est XSLT JSON. Le "Template" de la section de la documentation comprend cet exemple:
J'ai été vraiment fatigué de l'énorme quantité de JavaScript création de modèles de moteurs de là-bas, et tous leurs inline HTML-templates, des balisages différents styles, etc., et a décidé de construire une petite bibliothèque qui permet XSLT mise en forme de JSON structures de données. Pas la science de fusée en aucune façon-il est tout simplement JSON analysée au format XML, puis mis en forme avec un document XSLT. Il est aussi rapide, pas aussi vite que JavaScript moteurs de template en Chrome, mais dans la plupart des autres navigateurs, c'est au moins aussi rapide que le JS moteur de rechange pour les grandes structures de données.
JSONiq est d'une telle norme, et Zorba un open-source C++ de mise en œuvre. JSONiq peut aussi être vu comme XQuery avec l'ajout de JSON comme un type de données natif.
Je suis à l'aide de Chameau route umarshal(xmljson) -> pour(xlst) -> le maréchal(xmljson). Assez efficace (mais pas parfait à 100%), mais simple, si vous êtes déjà à l'aide de Chameau.
il est très possible de la convertir en JSON à l'aide de XSLT: vous avez besoin de JSON2SAX deserializer et SAX2JSON sérialiseur.
Exemple de code en Java:
http://www.gerixsoft.com/blog/json/xslt4json
Yate (https://github.com/pasaran/yate) est spécialement conçu après XSLT, caractéristiques JPath (un natural XPath équivalent pour JS), compilé en JavaScript et dispose d'un l'histoire de la production. Il est pratiquement sans-papiers, mais la lecture par le biais d'échantillons et de tests devrait être suffisant.
JSLT est très proche d'un JSON équivalent de XSLT. C'est une transformation de la langue où vous écrivez la partie fixe de la sortie de la syntaxe JSON, puis insérez les expressions permettant de calculer les valeurs que vous souhaitez insérer dans le modèle.
Un exemple:
Il est implémenté en Java sur le dessus de Jackson.
Pas trop sûr il est nécessaire pour cela, et pour moi, le manque d'outils suggère un manque de besoin. JSON est mieux traitées comme des objets (la façon dont c'est fait en JS de toute façon), et généralement, vous utilisez la langue des objets lui-même pour faire des transformations (Java pour Java les objets créés à partir de JSON, même pour Perl, Python, Perl, c#, PHP et ainsi de suite). Juste avec la normale affectations (ou un set, get), en boucle et ainsi de suite.
Je veux dire, XSLT est juste une autre langue, et la raison pour laquelle il est nécessaire que le XML n'est pas un objet de la notation et donc des objets de langages de programmation ne sont pas exactes correspond à (impédance entre hiérarchique modèle xml et les objets/les structures).
name
etaddress
, et les mettre dans un tableau:[.name, .address]
Pourquoi ne pas vous convertit JSON en XML en utilisant M. De Données Coverter , transformer à l'aide de XSLT et ensuite le modifier en JSON à l'aide de la même.
Pour un travail doodle/preuve de concept d'une approche à utiliser JavaScript avec le familier et le déclaratif motif derrière XSLT de correspondance des expressions et récursive de modèles, voir https://gist.github.com/brettz9/0e661b3093764f496e36
(Une approche similaire pourrait être pris pour JSON.)
Noter que la démonstration s'appuie également sur JavaScript 1.8 expression fermetures pour des raisons de commodité dans l'expression de modèles dans Firefox (au moins jusqu'à l'ES6 court formulaire pour les méthodes peuvent être mises en œuvre).
Avertissement: Ceci est mon propre code.
J'ai écrit un dom adaptateur pour ma jackson en fonction json framework de traitement il y a longtemps. Il utilise le nu.xom bibliothèque. Le résultant arborescence dom fonctionne avec java xpath et xslt installations. J'ai fait certains choix d'implémentation qui sont assez simple. Par exemple le nœud racine est toujours appelé "racine", les tableaux d'aller dans un noeud ol li sous-éléments (comme en html), et tout le reste est juste un sous-nœud avec une valeur primitive ou d'une autre nœud d'objet.
JsonXmlConverter.java
Utilisation:
JsonObject sampleJson = sampleJson();
org.w3c.dom.Document domNode = JsonXmlConverter.getW3cDocument(sampleJson, "root");
Une approche pas encore donné est d'utiliser un analyseur générateur pour créer un parseur XSLT qui analyse JSON et produit une sortie au format XML.
Une option est mentionné beaucoup en XML des conférences, est le ReX de l'analyseur générateur (http://www.bottlecaps.de/rex/) - bien que totalement sans-papiers sur le site, les recettes sont disponibles sur la recherche.
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 certaine façon.
Cela semble être disponible dans la version commerciale de Saxon, et pourraient éventuellement être inclus dans le IL version.
https://www.saxonica.com/html/documentation/functions/fn/parse-json.html
-
Ce que je m'attends à partir d'une solution alternative:
Je voudrais être en mesure d'entrée JSON pour extraire un ensemble de données, et la sortie JSON ou du TEXTE.
L'accès des propriétés arbitraires et d'évaluer les valeurs
Soutien à la logique conditionnelle
Je voudrais que la transformation de scripts externes de l'outil, à base de 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'autre outil pourrait manipuler du 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-je utiliser pour SQL, ou d'évaluer pleinement de cette option, mais j'ai l'espoir d'y regarder de plus bientôt. Juste quelques pensées à ce jour.
JSON-e a mises en œuvre dans les Node.js, Python et Aller.