Existe um equivalente XSLT para JSON? Algo para me permitir fazer transformações no JSON, como o XSLT faz no XML.
json
xslt
equivalent
language-comparisons
luvieere
fonte
fonte
Respostas:
Idéia interessante. Algumas pesquisas no Google produziram algumas páginas de interesse, incluindo:
Espero que isto ajude.
fonte
Equivalentes XSLT para JSON - uma lista de candidatos (ferramentas e especificações)
Ferramentas
Você pode usar o XSLT para JSON com o objetivo de fn: json-to-xml .
Especificações:
fonte
Tente JOLT . É uma biblioteca de transformação JSON para JSON escrita em Java.
Ele foi criado especificamente porque não queríamos jogar o jogo "JSON -> XML -> XSLT -> XML -> JSON", e o uso de um modelo para qualquer transformação suficientemente complexa não é sustentável.
fonte
jq - processador JSON de linha de comando leve e flexível
Não é baseado em modelo como o XSLT, mas mais conciso. por exemplo, para extrair
name
eaddress
campos em uma matriz:[.name, .address]
O tutorial mostra um exemplo de transformação da API JSON do Twitter (e o manual tem muitos exemplos).
fonte
.. | .attr_name?
que você está procurando? (de stedolan.github.io/jq/manual/#RecursiveDescent: .. )O XSLT suporta JSON como visto em http://www.w3.org/TR/xslt-30/#json
XML usa colchetes angulares para tokens de delimitador, JSON usa colchetes, colchetes, ... I. e. As menos comparações de reconhecimento de token do XML significam que ele é otimizado para transformação declarativa, enquanto que mais comparações, como a instrução switch, por motivos de velocidade, pressupõem a previsão de ramificação especulativa para a qual o código imperativo nas linguagens de script é útil. Como conseqüência direta, para diferentes combinações de dados semiestruturados, convém comparar o desempenho dos mecanismos XSLT e javascript como parte das páginas responsivas. Para carga útil insignificante de dados, as transformações podem funcionar tão bem com JSON sem serialização XML. A decisão do W3 deve ser baseada em uma melhor análise.
fonte
Recentemente, encontrei uma ferramenta que adoro para estilizar o JSON: https://github.com/twigkit/tempo . Ferramenta muito fácil de usar - na minha opinião, é muito mais fácil trabalhar com o XSLT - sem a necessidade de consultas XPATH.
fonte
Dê uma olhada em jsonpath-object-transform
fonte
Dizer que a falta de ferramentas sugere que a falta de necessidade está apenas implorando a pergunta. O mesmo poderia ser aplicado ao suporte para X ou Y no Linux (por que se preocupar em desenvolver drivers e / ou jogos de qualidade para um sistema operacional tão minoritário? E por que prestar atenção em um sistema operacional para o qual as grandes empresas de jogos e hardware não desenvolvem?). Provavelmente, as pessoas que precisariam usar XSLT e JSON acabariam usando uma solução alternativa um tanto trivial: Transformando JSON em XML. Mas essa não é a solução ideal, é?
Quando você tem um formato JSON nativo e deseja editá-lo "wysywyg" no navegador, o XSLT seria uma solução mais que adequada para o problema. Fazer isso com a programação javascript tradicional pode se tornar um problema.
Na verdade, eu implementei uma abordagem da "idade da pedra" do XSLT, usando a análise de substring para interpretar alguns comandos básicos de javascript, como chamar um modelo, processar filhos, etc. Certamente, implementar um mecanismo de transformação com um objeto JSON é muito mais fácil do que implementando um analisador XML completo para analisar o XSLT. O problema é que, para usar modelos XML para transformar um objeto JSON, é necessário analisar o XML dos modelos.
Para transformar um objeto JSON com XML (ou HTML, ou texto ou o que for), você precisa pensar cuidadosamente sobre a sintaxe e quais caracteres especiais você precisa usar para identificar os comandos de transformação. Caso contrário, você precisará criar um analisador para sua própria linguagem de modelos personalizada. Tendo percorrido esse caminho, posso dizer que não é bonito.
Atualização (12 de novembro de 2010): Após algumas semanas trabalhando no meu analisador, consegui otimizá-lo. Os modelos são analisados previamente e os comandos são armazenados como objetos JSON. As regras de transformação também são objetos JSON, enquanto o código do modelo é uma mistura de HTML e uma sintaxe de homebrew semelhante ao código do shell. Consegui transformar um documento JSON complexo em HTML para criar um editor de documentos. O código tem cerca de 1K linhas para o editor (é para um projeto privado, então não posso compartilhá-lo) e cerca de 990 linhas para o código de transformação JSON (inclui comandos de iteração, comparações simples, chamada de modelo, economia e avaliação de variáveis). Eu pretendo liberá-lo sob uma licença do MIT. Envie-me um e-mail se você quiser se envolver.
fonte
Eu escrevi minha própria pequena biblioteca em torno disso, recentemente, que tenta ficar o mais próximo possível
5.1 Modelo de processamento (XSLT REC) https://www.w3.org/TR/xslt#section-Processing-Model
quanto possível (como eu poderia de qualquer maneira), em algumas linhas de código JavaScript.
Aqui estão alguns exemplos de uso não completamente triviais ...
1. JSON para alguma marcação:
Fiddle: https://jsfiddle.net/YSharpLanguage/kj9pk8oz/10
(inspirado no Exemplo de documento D.1 (XSLT REC) https://www.w3.org/TR/xslt#section-Document-Example )
onde isso:
... dá:
e
2. JSON para JSON:
Fiddle: https://jsfiddle.net/YSharpLanguage/ppfmmu15/10
onde isso:
... dá:
3. XSLT vs. JavaScript:
Um equivalente a JavaScript de ...
Seção 14.4 do XSLT 3.0 REC Exemplo: agrupando nós com base em valores comuns
(em: http://jsfiddle.net/YSharpLanguage/8bqcd0ey/1 )
Cf. https://www.w3.org/TR/xslt-30/#grouping-examples
Onde...
... dá:
4. JSONiq vs. JavaScript:
Um equivalente a JavaScript de ...
Casos de uso JSONiq Seção 1.1.2. Agrupando consultas para JSON
(em: https://jsfiddle.net/YSharpLanguage/hvo24hmk/3 )
Cf. http://jsoniq.org/docs/JSONiq-usecases/html-single/index.html#jsongrouping
Onde...
... dá:
Também é útil superar as limitações do JSONPath wrt. consulta contra o eixo ancestral, conforme levantado por essa pergunta do SO (e certamente outros).
Por exemplo, como obter o desconto de um item de supermercado sabendo seu ID de marca, em
?
Uma solução possível é:
... que dá:
«HTH,
fonte
Existe agora! Recentemente, criei uma biblioteca, json-transforma , exatamente para esse fim:
https://github.com/ColinEberhardt/json-transforms
Ele usa uma combinação de JSPath , uma DSL modelada no XPath e uma abordagem de correspondência de padrão recursiva, inspirada diretamente no XSLT.
Aqui está um exemplo rápido. Dado o seguinte objeto JSON:
Aqui está uma transformação:
Que produz o seguinte:
Essa transformação é composta por três regras. O primeiro corresponde a qualquer automóvel fabricado pela Honda, emitindo um objeto com uma
Honda
propriedade e depois correspondendo recursivamente. A segunda regra corresponde a qualquer objeto com umamaker
propriedade, gerando as propriedadesmodel
eyear
. A final é a transformação de identidade que corresponde recursivamente.fonte
Como mais uma nova resposta para uma pergunta antiga, sugiro uma olhada no DefiantJS . Não é um equivalente XSLT para JSON, é XSLT para JSON. A seção "Templating" da documentação inclui este exemplo:
fonte
Estou muito cansado da enorme quantidade de mecanismos de modelagem de JavaScript disponíveis no mercado e de todos os seus modelos HTML embutidos, diferentes estilos de marcação etc., e decidi construir uma pequena biblioteca que permite a formatação XSLT para estruturas de dados JSON. Não é ciência de foguetes de qualquer forma - é apenas JSON analisado em XML e formatado com um documento XSLT. Também é rápido, não tão rápido quanto os mecanismos de modelo JavaScript no Chrome, mas na maioria dos outros navegadores é pelo menos tão rápido quanto a alternativa do mecanismo JS para estruturas de dados maiores.
fonte
Estou usando a rota Camel umarshal (xmljson) -> para (xlst) -> marshal (xmljson). Eficiente o suficiente (embora não seja 100% perfeito), mas simples, se você já estiver usando o Camel.
fonte
O JSONiq é um padrão e o Zorba, uma implementação C ++ de código aberto. O JSONiq também pode ser visto como XQuery com a adição do JSON como um tipo de dados nativo.
fonte
é muito possível converter JSON usando XSLT: você precisa do desserializador JSON2SAX e do serializador SAX2JSON.
Código de amostra em Java: http://www.gerixsoft.com/blog/json/xslt4json
fonte
O Yate ( https://github.com/pasaran/yate ) foi desenvolvido especificamente após o XSLT, apresenta o JPath (um equivalente XPath natural para JS), compila para JavaScript e tem um histórico de uso da produção. É praticamente indocumentado, mas a leitura de amostras e testes deve ser suficiente.
fonte
O JSLT está muito próximo de um equivalente JSON do XSLT. É uma linguagem de transformação na qual você escreve a parte fixa da saída na sintaxe JSON e insere expressões para calcular os valores que deseja inserir no modelo.
Um exemplo:
É implementado em Java em cima de Jackson.
fonte
Não tenho muita certeza da necessidade disso, e para mim a falta de ferramentas sugere falta de necessidade. O JSON é melhor processado como objetos (da mesma forma que é feito em JS), e você normalmente usa a linguagem dos próprios objetos para fazer transformações (objetos Java para Java criados a partir de JSON, o mesmo para Perl, Python, Perl, c #, PHP e assim por diante). em). Apenas com atribuições normais (ou definir, obter), repetir e assim por diante.
Quero dizer, XSLT é apenas outra linguagem, e uma razão pela qual é necessário é que XML não é uma notação de objeto e, portanto, objetos de linguagens de programação não são ajustes exatos (impedância entre o modelo xml hierárquico e os objetos / estruturas).
fonte
name
eaddress
, e colocá-los em uma matriz:[.name, .address]
Por que você não converte JSON em XML usando o Mr. Data Coverter , transforma-o usando XSLT e depois o altera novamente para JSON usando o mesmo.
fonte
Para obter um doodle / prova de conceito de uma abordagem para utilizar JavaScript puro, juntamente com o padrão familiar e declarativo por trás das expressões correspondentes e dos modelos recursivos do XSLT, consulte https://gist.github.com/brettz9/0e661b3093764f496e36
(Uma abordagem semelhante pode ser adotada para JSON.)
Observe que a demonstração também conta com o fechamento da expressão JavaScript 1.8 por conveniência na expressão de modelos no Firefox (pelo menos até que o formato abreviado de ES6 para métodos possa ser implementado).
Isenção de responsabilidade: Este é o meu próprio código.
fonte
Eu escrevi um adaptador dom para minha estrutura de processamento de json baseada em jackson há muito tempo. Ele usa a biblioteca nu.xom. A árvore dom resultante funciona com os recursos java xpath e xslt. Fiz algumas escolhas de implementação bastante simples. Por exemplo, o nó raiz é sempre chamado de "raiz", as matrizes entram em um nó ol com subelementos li (como em html) e todo o resto é apenas um subnó com um valor primitivo ou outro nó de objeto.
JsonXmlConverter.java
Uso:
JsonObject sampleJson = sampleJson(); org.w3c.dom.Document domNode = JsonXmlConverter.getW3cDocument(sampleJson, "root");
fonte
Uma abordagem ainda não fornecida é usar um gerador de analisador para criar um analisador no XSLT que analisa JSON e produz uma saída XML.
Uma opção mencionada muito nas conferências XML é o gerador de analisador ReX ( http://www.bottlecaps.de/rex/ ) - embora totalmente indocumentado no site, as receitas estão disponíveis na pesquisa.
fonte
Pode ser possível usar o XSLT com JSON. O Verson 3 do XPath (3.1) XSLT (3.0) e XQuery (3.1) suporta JSON de alguma forma. Isso parece estar disponível na versão comercial do Saxon e pode em algum momento ser incluído na versão HE. https://www.saxonica.com/html/documentation/functions/fn/parse-json.html
-
O que eu esperaria de uma solução alternativa:
Gostaria de poder inserir o JSON para buscar um conjunto de dados correspondente e gerar JSON ou TEXT.
Acesse propriedades arbitrárias e avalie os valores
Suporte para lógica condicional
Eu gostaria que os scripts de transformação fossem externos à ferramenta, com base em texto e, de preferência, uma linguagem comumente usada.
Alternativa potencial?
Gostaria de saber se o SQL poderia ser uma alternativa adequada. https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
Seria bom se a ferramenta alternativa pudesse lidar com JSON e XML https://docs.microsoft.com/en-us/sql/relational-databases/xml/openxml-sql-server
Ainda não tentei converter os scripts XSLT que uso em SQL ou avaliei completamente essa opção ainda, mas espero analisá-la mais em breve. Apenas alguns pensamentos até agora.
fonte