Czy istnieje odpowiednik XSLT dla JSON? Coś, co pozwala mi dokonywać transformacji w JSON, tak jak XSLT robi XML.
json
xslt
equivalent
language-comparisons
luvieere
źródło
źródło
Odpowiedzi:
Ciekawy pomysł. Niektóre wyszukiwania w Google wytworzyły kilka interesujących stron, w tym:
Mam nadzieję że to pomoże.
źródło
Ekwiwalenty XSLT dla JSON - lista kandydatów (narzędzia i specyfikacje)
Przybory
Możesz użyć XSLT dla JSON w celu fn: json-to-xml .
Okular:
źródło
Wypróbuj JOLT . Jest to biblioteka transformacji JSON do JSON napisana w Javie.
Został stworzony specjalnie dlatego, że nie chcieliśmy grać w grę „JSON -> XML -> XSLT -> XML -> JSON”, a użycie szablonu dla wystarczająco złożonej transformacji jest niemożliwe do utrzymania.
źródło
jq - lekki i elastyczny procesor JSON z wiersza poleceń
Nie jest oparty na szablonie jak XSLT, ale bardziej zwięzły. np. aby wyodrębnić
name
iaddress
pola do tablicy:[.name, .address]
W samouczku przedstawiono przykład transformacji interfejsu API JSON na Twitterze (w instrukcji jest wiele przykładów).
źródło
.. | .attr_name?
tym, czego szukasz? (od stedolan.github.io/jq/manual/#RecursiveDescent: .. )XSLT obsługuje JSON, jak widać na stronie http://www.w3.org/TR/xslt-30/#json
XML używa nawiasów kątowych do tokenów ograniczników, JSON używa nawiasów klamrowych, nawiasów kwadratowych, ... I. e. Mniej porównań rozpoznawania tokena w języku XML oznacza, że jest on zoptymalizowany pod kątem deklaratywnej transformacji, podczas gdy więcej porównań, które są podobne do instrukcji switch, ze względów szybkości zakładają spekulacyjne przewidywanie gałęzi, do czego przydatny jest kod imperatywny w językach skryptowych. Bezpośrednią konsekwencją jest to, że w przypadku różnych mieszanin częściowo ustrukturyzowanych danych możesz przetestować wydajność XSLT i silników javascript w ramach responsywnych stron. W przypadku niewielkiej ilości danych transformacje mogą równie dobrze działać z JSON bez serializacji XML. Decyzja W3 powinna opierać się na lepszej analizie.
źródło
Niedawno znalazłem narzędzie, które uwielbiam do stylizacji JSON: https://github.com/twigkit/tempo . Bardzo łatwe w użyciu narzędzie - moim zdaniem jest o wiele łatwiejsze w obsłudze niż XSLT - nie potrzeba zapytań XPATH.
źródło
Spójrz na jsonpath-object-transform
źródło
Stwierdzenie, że brak narzędzi sugeruje, że brak potrzeby jest tylko pytaniem. To samo można zastosować do obsługi X lub Y w systemie Linux (po co zawracać sobie głowę opracowywaniem wysokiej jakości sterowników i / lub gier dla tak niewielkiego systemu operacyjnego? Dlaczego warto zwracać uwagę na system operacyjny, dla którego duże firmy produkujące gry i sprzęt nie opracowują?). Prawdopodobnie ludzie, którzy musieliby używać XSLT i JSON, używają nieco trywialnego obejścia: Przekształcanie JSON w XML. Ale to nie jest optymalne rozwiązanie, prawda?
Jeśli masz natywny format JSON i chcesz go edytować w przeglądarce „wysywyg”, XSLT byłoby rozwiązaniem bardziej niż wystarczającym. Robienie tego przy tradycyjnym programowaniu w javascript może stać się trudnym zadaniem.
W rzeczywistości wdrożyłem podejście XSLT w „epoce kamienia”, używając analizy składniowej do interpretacji niektórych podstawowych poleceń javascript, takich jak wywoływanie szablonu, przetwarzanie potomków itp. Z pewnością implementacja silnika transformacji z obiektem JSON jest znacznie łatwiejsza niż implementacja pełnoprawnego analizatora składni XML w celu parsowania XSLT. Problem polega na tym, że aby użyć szablonów XML do transformacji obiektu JSON, musisz przeanalizować XML szablonów.
Aby przekształcić obiekt JSON za pomocą XML (lub HTML, tekst lub cokolwiek innego), należy dokładnie przemyśleć składnię i znaki specjalne, których należy użyć do zidentyfikowania poleceń transformacji. W przeciwnym razie będziesz musiał zaprojektować parser dla własnego, niestandardowego języka szablonów. Po przejściu tej ścieżki mogę powiedzieć, że nie jest ładna.
Aktualizacja (12 listopada 2010 r.): Po kilku tygodniach pracy nad moim parserem byłem w stanie go zoptymalizować. Szablony są wcześniej analizowane, a polecenia są przechowywane jako obiekty JSON. Reguły transformacji są również obiektami JSON, podczas gdy kod szablonu jest mieszanką HTML i składni homebrew podobnej do kodu powłoki. Byłem w stanie przekształcić złożony dokument JSON w HTML, aby utworzyć edytor dokumentów. Kod zawiera około 1 000 wierszy dla edytora (dotyczy prywatnego projektu, więc nie mogę go udostępnić) i około 990 wierszy dla kodu transformacji JSON (zawiera polecenia iteracji, proste porównania, wywoływanie szablonów, zapisywanie zmiennych i ocenę). Planuję wydać go na licencji MIT. Napisz do mnie, jeśli chcesz się zaangażować.
źródło
Ostatnio napisałem o tym swoją małą bibliotekę, która stara się być tak blisko
5.1 Model przetwarzania (XSLT REC) https://www.w3.org/TR/xslt#section-Processing-Model
jak to możliwe (jak mogłem i tak), w kilku wierszach kodu JavaScript.
Oto kilka niezupełnie trywialnych przykładów użycia ...
1. JSON-to-some-markup:
Fiddle: https://jsfiddle.net/YSharpLanguage/kj9pk8oz/10
(zainspirowany przykładem dokumentu D.1 (XSLT REC) https://www.w3.org/TR/xslt#section-Document-Example )
gdzie to:
... daje:
i
2. JSON-to-JSON:
Fiddle: https://jsfiddle.net/YSharpLanguage/ppfmmu15/10
gdzie to:
... daje:
3. XSLT vs. JavaScript:
JavaScriptowy odpowiednik ...
XSLT 3.0 REC Sekcja 14.4 Przykład: Grupowanie węzłów na podstawie wspólnych wartości
(pod: http://jsfiddle.net/YSharpLanguage/8bqcd0ey/1 )
Por. https://www.w3.org/TR/xslt-30/#grouping-examples
gdzie...
... daje:
4. JSONiq vs. JavaScript:
JavaScriptowy odpowiednik ...
Przypadki użycia JSONiq Sekcja 1.1.2. Grupowanie zapytań dla JSON
(pod: https://jsfiddle.net/YSharpLanguage/hvo24hmk/3 )
Por. http://jsoniq.org/docs/JSONiq-usecases/html-single/index.html#jsongrouping
gdzie...
... daje:
Przydatne jest także pokonanie ograniczeń JSONPath wrt. kwerendy względem osi przodka, jak podnosi to pytanie SO (i na pewno inne).
Na przykład, jak uzyskać zniżkę na artykuł spożywczy, znając jego identyfikator marki, w
?
Możliwym rozwiązaniem jest:
... co daje:
„HTH,
źródło
Jest teraz! Niedawno stworzyłem bibliotekę, transformaty json , właśnie w tym celu:
https://github.com/ColinEberhardt/json-transforms
Wykorzystuje kombinację JSPath , DSL wzorowany na XPath oraz rekurencyjne podejście do dopasowywania wzorców, zainspirowane bezpośrednio XSLT.
Oto szybki przykład. Biorąc pod uwagę następujący obiekt JSON:
Oto transformacja:
Które generują następujące:
Ta transformacja składa się z trzech zasad. Pierwszy pasuje do każdego samochodu wyprodukowanego przez Hondę, emitując obiekt z
Honda
właściwością, a następnie dopasowując rekurencyjnie. Druga reguła dopasowuje dowolny obiekt zmaker
właściwością, wyprowadzając właściwościmodel
iyear
. Ostatnim jest transformacja tożsamości, która rekurencyjnie pasuje.źródło
Jako kolejną nową odpowiedź na stare pytanie, proponuję spojrzeć na DefiantJS . To nie jest XSLT odpowiednik dla formatu JSON, to jest XSLT do JSON. Sekcja „Szablony” dokumentacji zawiera ten przykład:
źródło
Naprawdę zmęczyło mnie ogromna ilość silników szablonów JavaScript i wszystkich ich wbudowanych szablonów HTML, różnych stylów znaczników itp., I postanowiłem zbudować małą bibliotekę, która umożliwia formatowanie XSLT dla struktur danych JSON. W żaden sposób nie jest to nauka rakietowa - jest to po prostu JSON przetworzony na XML, a następnie sformatowany za pomocą dokumentu XSLT. Jest także szybki, nie tak szybki jak silniki szablonów JavaScript w Chrome, ale w większości innych przeglądarek jest co najmniej tak szybki, jak silnik JS alternatywa dla większych struktur danych.
źródło
Korzystam z trasy wielbłąda umarshal (xmljson) -> do (xlst) -> marshal (xmljson). Wystarczająco wydajny (choć nie w 100% idealny), ale prosty, jeśli już używasz Camel.
źródło
JSONiq jest takim standardem, a Zorba implementacją C ++ typu open source. JSONiq można również postrzegać jako XQuery z dodaniem JSON jako rodzimego typu danych.
źródło
bardzo możliwe jest przekonwertowanie JSON za pomocą XSLT: potrzebujesz deserializatora JSON2SAX i serializatora SAX2JSON.
Przykładowy kod w Javie: http://www.gerixsoft.com/blog/json/xslt4json
źródło
Yate ( https://github.com/pasaran/yate ) jest specjalnie zaprojektowany po XSLT, zawiera JPath (naturalny odpowiednik XPath dla JS), kompiluje się w JavaScript i ma dość długą historię zastosowań produkcyjnych. Jest praktycznie nieudokumentowany, ale wystarczy przejrzeć próbki i testy.
źródło
JSLT jest bardzo zbliżony do JSON- owego odpowiednika XSLT. Jest to język transformacji, w którym zapisujesz stałą część wyniku w składni JSON, a następnie wstawiasz wyrażenia, aby obliczyć wartości, które chcesz wstawić do szablonu.
Przykład:
Jest zaimplementowany w Javie na Jacksonie.
źródło
Nie jestem pewien, czy jest to potrzebne, a dla mnie brak narzędzi sugeruje brak takiej potrzeby. JSON najlepiej przetwarzać jako obiekty (tak jak i tak robi się w JS) i zwykle używasz języka samych obiektów do wykonywania transformacji (Java dla obiektów Java utworzonych z JSON, to samo dla Perla, Pythona, Perla, c #, PHP itd. na). Po prostu z normalnymi zadaniami (lub ustaw, pobierz), zapętlaniem i tak dalej.
Mam na myśli, że XSLT jest po prostu innym językiem, a jednym z powodów, dla których jest potrzebny, jest to, że XML nie jest notacją obiektową, a zatem obiekty języków programowania nie są dokładnie dopasowane (impedancja między hierarchicznym modelem xml a obiektami / strukturami).
źródło
name
iaddress
, i umieścić je w tablicy:[.name, .address]
Dlaczego nie konwertujesz JSON na XML za pomocą Mr. Data Coverter , przekształcasz go za pomocą XSLT, a następnie zmieniasz z powrotem na JSON za pomocą tego samego.
źródło
Aby zapoznać się z działającym doodle / dowodem koncepcji podejścia do wykorzystania czystego JavaScript wraz ze znanym i deklaratywnym wzorcem odpowiadającym wyrażeniom XSLT i szablonom rekurencyjnym, zobacz https://gist.github.com/brettz9/0e661b3093764f496e36
(Podobne podejście można zastosować w przypadku JSON.)
Zwróć uwagę, że wersja demonstracyjna opiera się również na zamykaniu wyrażeń JavaScript 1.8 w celu ułatwienia wyrażania szablonów w przeglądarce Firefox (przynajmniej do czasu wdrożenia krótkiej formy metod ES6).
Oświadczenie: To jest mój własny kod.
źródło
Dawno temu napisałem adapter dom dla mojej platformy przetwarzania Json opartej na Jacksonie. Korzysta z biblioteki nu.xom. Powstałe drzewo dom działa z urządzeniami Java Xpath i xslt. Dokonałem kilku wyborów implementacyjnych, które są dość proste. Na przykład węzeł główny jest zawsze nazywany „korzeniem”, tablice przechodzą do węzła ol z podelementami li (jak w html), a wszystko inne to tylko podrzędny węzeł z pierwotną wartością lub inny węzeł obiektowy.
JsonXmlConverter.java
Stosowanie:
JsonObject sampleJson = sampleJson(); org.w3c.dom.Document domNode = JsonXmlConverter.getW3cDocument(sampleJson, "root");
źródło
Jedną z metod, których jeszcze nie podano, jest użycie generatora analizatora składni w celu utworzenia analizatora składni w XSLT, który analizuje JSON i generuje dane wyjściowe XML.
Jedną z opcji, o której często się mówi na konferencjach XML, jest generator parsera ReX ( http://www.bottlecaps.de/rex/ ) - chociaż na stronie nie ma żadnej dokumentacji, przepisy są dostępne podczas wyszukiwania.
źródło
Możliwe jest użycie XSLT z JSON. Verson 3 XPath (3.1) XSLT (3.0) i XQuery (3.1) w jakiś sposób obsługuje JSON. Wydaje się, że jest to dostępne w komercyjnej wersji Saxon i może w pewnym momencie zostać uwzględnione w wersji HE. https://www.saxonica.com/html/documentation/functions/fn/parse-json.html
-
Czego oczekiwałbym od alternatywnego rozwiązania:
Chciałbym mieć możliwość wprowadzania danych JSON w celu pobrania pasującego zestawu danych i generowania danych JSON lub TEXT.
Uzyskaj dostęp do dowolnych właściwości i oceń wartości
Obsługa logiki warunkowej
Chciałbym, aby skrypty transformacji były zewnętrzne względem narzędzia, oparte na tekście, a najlepiej powszechnie używanym języku.
Potencjalna alternatywa?
Zastanawiam się, czy SQL może być odpowiednią alternatywą. https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
Byłoby miło, gdyby alternatywne narzędzie mogło obsługiwać JSON i XML https://docs.microsoft.com/en-us/sql/relational-databases/xml/openxml-sql-server
Nie próbowałem jeszcze przekonwertować skryptów XSLT, których używam na SQL, ani w pełni nie oceniłem tej opcji, ale mam nadzieję, że przyjrzę się jej wkrótce. Jak dotąd kilka myśli.
źródło