¿Hay un equivalente XSLT para JSON? Algo que me permita hacer transformaciones en JSON como XSLT hace a XML.
json
xslt
equivalent
language-comparisons
luvieere
fuente
fuente
Respuestas:
Idea interesante. Algunas búsquedas en Google produjeron algunas páginas de interés, que incluyen:
Espero que esto ayude.
fuente
Equivalentes XSLT para JSON: una lista de candidatos (herramientas y especificaciones)
Herramientas
Puede usar XSLT para JSON con el objetivo de fn: json-to-xml .
Especificaciones:
fuente
Prueba JOLT . Es una biblioteca de transformación JSON a JSON escrita en Java.
Fue creado específicamente porque no queríamos jugar al juego "JSON -> XML -> XSLT -> XML -> JSON", y el uso de una plantilla para cualquier transformación suficientemente compleja es imposible de mantener.
fuente
jq: procesador JSON de línea de comandos ligero y flexible
No está basado en plantillas como XSLT, pero es más conciso. Por ejemplo, para extraer
name
yaddress
campos en una matriz:[.name, .address]
El tutorial muestra un ejemplo de transformación de la API JSON de Twitter (y el manual tiene muchos ejemplos).
fuente
.. | .attr_name?
lo que estás buscando? (de stedolan.github.io/jq/manual/#RecursiveDescent: .. )XSLT admite JSON como se ve en http://www.w3.org/TR/xslt-30/#json
XML usa corchetes angulares para tokens delimitadores, JSON usa corchetes, corchetes, ... I. e. Las pocas comparaciones de reconocimiento de token de XML significan que está optimizado para la transformación declarativa, mientras que más comparaciones, como una declaración de cambio, por razones de velocidad suponen una predicción de rama especulativa para la que es útil el código imperativo en los lenguajes de script. Como consecuencia directa, para diferentes mezclas de datos semiestructurados, es posible que desee comparar el rendimiento de los motores XSLT y javascript como parte de las páginas receptivas. Para una carga útil de datos insignificante, las transformaciones podrían funcionar igual de bien con JSON sin serialización XML. La decisión de W3 debería basarse en un mejor análisis.
fuente
Recientemente encontré una herramienta que me encanta para diseñar JSON: https://github.com/twigkit/tempo . Herramienta muy fácil de usar, en mi opinión, es mucho más fácil trabajar con ella que XSLT, sin necesidad de consultas XPATH.
fuente
Echa un vistazo a jsonpath-object-transform
fuente
Decir que la falta de herramientas sugiere que la falta de necesidad es solo una pregunta. Lo mismo podría aplicarse al soporte para X o Y en Linux (¿por qué molestarse en desarrollar controladores y / o juegos de calidad para un sistema operativo tan minoritario? ¿Y por qué prestar atención a un sistema operativo para el que las grandes empresas de hardware y juegos no desarrollan?). Probablemente, las personas que necesitarían usar XSLT y JSON terminan usando una solución algo trivial: transformar JSON en XML. Pero esa no es la solución óptima, ¿verdad?
Cuando tiene un formato JSON nativo y desea editarlo "wysywyg" en el navegador, XSLT sería una solución más que adecuada para el problema. Hacer eso con la programación tradicional de JavaScript puede convertirse en una molestia.
De hecho, he implementado un enfoque de "edad de piedra" para XSLT, utilizando el análisis de subcadenas para interpretar algunos comandos básicos para javascript, como llamar a una plantilla, procesar hijos, etc. Ciertamente, implementar un motor de transformación con un objeto JSON es mucho más fácil que implementar un analizador XML completo para analizar el XSLT. El problema es que para usar plantillas XML para transformar un objeto JSON necesita analizar el XML de las plantillas.
Para transformar un objeto JSON con XML (o HTML, o texto o lo que sea), debe pensar detenidamente sobre la sintaxis y los caracteres especiales que necesita para identificar los comandos de transformación. De lo contrario, terminarás teniendo que diseñar un analizador para tu propio lenguaje de plantillas personalizado. Después de haber recorrido ese camino, puedo decirte que no es bonito.
Actualización (12 de noviembre de 2010): después de un par de semanas trabajando en mi analizador, he podido optimizarlo. Las plantillas se analizan de antemano y los comandos se almacenan como objetos JSON. Las reglas de transformación también son objetos JSON, mientras que el código de la plantilla es una combinación de HTML y una sintaxis homebrew similar al código shell. He podido transformar un documento JSON complejo en HTML para crear un editor de documentos. El código tiene alrededor de 1K líneas para el editor (es para un proyecto privado, así que no puedo compartirlo) y alrededor de 990 líneas para el código de transformación JSON (incluye comandos de iteración, comparaciones simples, llamadas a plantillas, guardado y evaluación de variables). Planeo lanzarlo bajo una licencia MIT. Envíame un correo si quieres involucrarte.
fuente
Recientemente escribí mi propia pequeña biblioteca sobre esto, que trata de mantenerse lo más cerca posible de
5.1 Modelo de procesamiento (XSLT REC) https://www.w3.org/TR/xslt#section-Processing-Model
como es posible (como pude de todos modos), en unas pocas líneas de código JavaScript.
Aquí hay algunos ejemplos de uso no completamente triviales ...
1. JSON-a-algún-marcado:
Fiddle: https://jsfiddle.net/YSharpLanguage/kj9pk8oz/10
(inspirado en el ejemplo de documento D.1 (XSLT REC) https://www.w3.org/TR/xslt#section-Document-Example )
donde esto:
... da:
y
2. JSON a JSON:
Fiddle: https://jsfiddle.net/YSharpLanguage/ppfmmu15/10
donde esto:
... da:
3. XSLT vs. JavaScript:
Un equivalente de JavaScript de ...
XSLT 3.0 REC Sección 14.4 Ejemplo: Nodos de agrupación basados en valores comunes
(en: http://jsfiddle.net/YSharpLanguage/8bqcd0ey/1 )
Cf. https://www.w3.org/TR/xslt-30/#grouping-examples
dónde...
... da:
4. JSONiq vs. JavaScript:
Un equivalente de JavaScript de ...
Casos de uso de JSONiq Sección 1.1.2. Consultas de agrupación para JSON
(en: https://jsfiddle.net/YSharpLanguage/hvo24hmk/3 )
Cf. http://jsoniq.org/docs/JSONiq-usecases/html-single/index.html#jsongrouping
dónde...
... da:
También es útil para superar las limitaciones de JSONPath wrt. consultas contra el eje ancestro, como lo plantea esta pregunta SO (y ciertamente otras).
Por ejemplo, cómo obtener el descuento de un artículo de supermercado conociendo su ID de marca, en
?
Una posible solución es:
... lo que da:
'HTH,
fuente
Hay ahora! Recientemente creé una biblioteca, json-transforma , exactamente para este propósito:
https://github.com/ColinEberhardt/json-transforms
Utiliza una combinación de JSPath , un DSL modelado en XPath y un enfoque de coincidencia de patrones recursivo, inspirado directamente por XSLT.
Aquí hay un ejemplo rápido. Dado el siguiente objeto JSON:
Aquí hay una transformación:
Lo que produce lo siguiente:
Esta transformación se compone de tres reglas. El primero coincide con cualquier automóvil fabricado por Honda, que emite un objeto con una
Honda
propiedad y luego coincide de forma recursiva. La segunda regla coincide con cualquier objeto con unamaker
propiedad, generando las propiedadesmodel
yyear
. La final es la transformación de identidad que coincide recursivamente.fuente
Como otra nueva respuesta a una vieja pregunta, sugeriría un vistazo a DefiantJS . No es un equivalente XSLT para JSON, es XSLT para JSON. La sección "Plantilla" de la documentación incluye este ejemplo:
fuente
Estoy realmente cansado de la enorme cantidad de motores de plantillas de JavaScript, y todas sus plantillas HTML en línea, diferentes estilos de marcado, etc., y decidí construir una pequeña biblioteca que permita el formato XSLT para estructuras de datos JSON. No es ciencia espacial de ninguna manera: es solo JSON analizado a XML y luego formateado con un documento XSLT. También es rápido, no tan rápido como los motores de plantillas JavaScript en Chrome, pero en la mayoría de los otros navegadores es al menos tan rápido como la alternativa del motor JS para estructuras de datos más grandes.
fuente
Estoy usando Camel route umarshal (xmljson) -> to (xlst) -> marshal (xmljson). Suficientemente eficiente (aunque no 100% perfecto), pero simple, si ya está usando Camel.
fuente
JSONiq es un estándar y Zorba una implementación de C ++ de código abierto. JSONiq también se puede ver como XQuery al agregar JSON como un tipo de datos nativo.
fuente
es muy posible convertir JSON usando XSLT: necesita el deserializador JSON2SAX y el serializador SAX2JSON.
Código de muestra en Java: http://www.gerixsoft.com/blog/json/xslt4json
fuente
Yate ( https://github.com/pasaran/yate ) está específicamente diseñado después de XSLT, presenta JPath (un equivalente natural de XPath para JS), se compila a JavaScript y tiene un historial bastante amplio de uso de producción. Prácticamente no está documentado, pero leer muestras y pruebas debería ser suficiente.
fuente
JSLT está muy cerca de un equivalente JSON de XSLT. Es un lenguaje de transformación donde escribe la parte fija de la salida en sintaxis JSON, luego inserta expresiones para calcular los valores que desea insertar en la plantilla.
Un ejemplo:
Está implementado en Java sobre Jackson.
fuente
No estoy muy seguro de que sea necesario, y para mí la falta de herramientas sugiere falta de necesidad. JSON se procesa mejor como objetos (la forma en que se hace en JS de todos modos), y normalmente se usa el lenguaje de los objetos para hacer transformaciones (Java para objetos Java creados a partir de JSON, lo mismo para Perl, Python, Perl, c #, PHP, etc. en). Solo con asignaciones normales (o set, get), bucles, etc.
Quiero decir, XSLT es solo otro lenguaje, y una razón por la que se necesita es que XML no es una notación de objeto y, por lo tanto, los objetos de los lenguajes de programación no son ajustes exactos (impedancia entre el modelo jerárquico xml y los objetos / estructuras).
fuente
name
yaddress
ponerlos en una matriz:[.name, .address]
¿Por qué no convierte JSON a XML con Mr. Data Coverter , lo transforma con XSLT y luego lo vuelve a cambiar a JSON con el mismo?
fuente
Para un garabato / prueba de concepto funcional de un enfoque para utilizar JavaScript puro junto con el patrón familiar y declarativo detrás de las expresiones coincidentes y las plantillas recursivas de XSLT, consulte https://gist.github.com/brettz9/0e661b3093764f496e36
(Se podría adoptar un enfoque similar para JSON).
Tenga en cuenta que la demostración también se basa en los cierres de expresiones de JavaScript 1.8 por conveniencia al expresar plantillas en Firefox (al menos hasta que se pueda implementar la forma corta ES6 para los métodos).
Descargo de responsabilidad: este es mi propio código.
fuente
Hace mucho tiempo escribí un adaptador dom para mi marco de procesamiento json basado en jackson. Utiliza la biblioteca nu.xom. El árbol dom resultante funciona con las instalaciones java xpath y xslt. Tomé algunas decisiones de implementación que son bastante sencillas. Por ejemplo, el nodo raíz siempre se llama "raíz", las matrices van a un nodo ol con elementos secundarios li (como en html), y todo lo demás es solo un nodo secundario con un valor primitivo u otro nodo de objeto.
JsonXmlConverter.java
Uso:
JsonObject sampleJson = sampleJson(); org.w3c.dom.Document domNode = JsonXmlConverter.getW3cDocument(sampleJson, "root");
fuente
Un enfoque que aún no se ha dado es utilizar un generador de analizadores para crear un analizador en XSLT que analice JSON y produzca una salida XML.
Una opción que se menciona mucho en las conferencias XML es el generador de analizador ReX ( http://www.bottlecaps.de/rex/ ), aunque está totalmente indocumentado en el sitio, las recetas están disponibles en la búsqueda.
fuente
Es posible usar XSLT con JSON. La versión 3 de XPath (3.1) XSLT (3.0) y XQuery (3.1) admite JSON de alguna manera. Esto parece estar disponible en la versión comercial de Saxon, y en algún momento podría incluirse en la versión HE. https://www.saxonica.com/html/documentation/functions/fn/parse-json.html
-
Lo que esperaría de una solución alternativa:
Me gustaría poder ingresar JSON para obtener un conjunto de datos coincidentes y generar JSON o TEXT.
Acceda a propiedades arbitrarias y evalúe los valores
Soporte para lógica condicional.
Me gustaría que los scripts de transformación fueran externos a la herramienta, basados en texto y, preferiblemente, un lenguaje de uso común.
Alternativa potencial?
Me pregunto si SQL podría ser una alternativa adecuada. https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
Sería bueno si la herramienta alternativa pudiera manejar JSON y XML https://docs.microsoft.com/en-us/sql/relational-databases/xml/openxml-sql-server
Todavía no he intentado convertir los scripts XSLT que uso a SQL, o he evaluado completamente esta opción todavía, pero espero verlo más pronto. Solo algunos pensamientos hasta ahora.
fuente