Apakah ada XSLT yang setara untuk JSON? Sesuatu untuk memungkinkan saya melakukan transformasi pada JSON seperti XSLT terhadap XML.
json
xslt
equivalent
language-comparisons
luvieere
sumber
sumber
Jawaban:
Ide yang menarik. Beberapa pencarian di Google menghasilkan beberapa halaman yang menarik, termasuk:
Semoga ini membantu.
sumber
Setara XSLT untuk JSON - daftar kandidat (alat dan spesifikasi)
Alat
Anda dapat menggunakan XSLT untuk JSON dengan tujuan fn: json-to-xml .
Spesifikasi:
sumber
Coba JOLT . Ini adalah perpustakaan transformasi JSON ke JSON yang ditulis dalam Java.
Itu dibuat khusus karena kami tidak ingin memainkan permainan "JSON -> XML -> XSLT -> XML -> JSON", dan menggunakan templat untuk setiap transformasi yang cukup kompleks tidak dapat dipelihara.
sumber
jq - prosesor JSON baris perintah yang ringan dan fleksibel
Ini bukan berbasis template seperti XSLT, tetapi lebih ringkas. misalnya untuk mengekstrak
name
danaddress
bidang ke dalam array:[.name, .address]
The tutorial berjalan melalui contoh mengubah JSON API Twitter (dan pengguna memiliki banyak contoh).
sumber
.. | .attr_name?
apa yang Anda cari? (dari stedolan.github.io/jq/manual/#RecursiveDescent: .. )XSLT mendukung JSON seperti yang terlihat di http://www.w3.org/TR/xslt-30/#json
XML menggunakan kurung sudut untuk token pembatas, JSON menggunakan kurung kurawal, kurung siku, ... I. e. Perbandingan token pengakuan XML yang lebih sedikit berarti dioptimalkan untuk transformasi deklaratif, sedangkan lebih banyak perbandingan, seperti pernyataan switch, karena alasan kecepatan mengasumsikan prediksi cabang spekulatif bahwa kode imperatif dalam bahasa skrip berguna untuk. Sebagai konsekuensi langsung, untuk campuran data semi-terstruktur yang berbeda, Anda mungkin ingin membandingkan kinerja XSLT dan mesin javascript sebagai bagian dari halaman responsif. Untuk muatan data yang dapat diabaikan, transformasi mungkin bekerja dengan baik dengan JSON tanpa serialisasi XML. Keputusan W3 harus didasarkan pada analisis yang lebih baik.
sumber
Baru-baru ini saya menemukan alat yang saya sukai untuk menata JSON: https://github.com/twigkit/tempo . Alat yang sangat mudah digunakan - menurut saya, jauh lebih mudah digunakan daripada XSLT - tidak perlu untuk pertanyaan XPATH.
sumber
Lihatlah jsonpath-object-transform
sumber
Untuk mengatakan kurangnya alat menyarankan kurangnya kebutuhan hanya mengemis pertanyaan. Hal yang sama dapat diterapkan untuk dukungan untuk X atau Y di Linux (Mengapa repot-repot mengembangkan driver dan / atau game berkualitas untuk OS minoritas seperti itu? Dan mengapa memperhatikan OS yang tidak dikembangkan oleh perusahaan besar dan perangkat keras?). Mungkin orang-orang yang perlu menggunakan XSLT dan JSON akhirnya menggunakan solusi yang agak sepele: Mengubah JSON menjadi XML. Tapi itu bukan solusi optimal, bukan?
Ketika Anda memiliki format JSON asli dan Anda ingin mengeditnya "wysywyg" di browser, XSLT akan menjadi solusi yang lebih dari cukup untuk masalah tersebut. Melakukan hal itu dengan pemrograman javascript tradisional bisa menjadi menyebalkan.
Bahkan, saya telah menerapkan pendekatan "zaman batu" ke XSLT, menggunakan substring parsing untuk menafsirkan beberapa perintah dasar untuk javascript, seperti memanggil templat, memproses anak-anak, dll. Tentu saja menerapkan mesin transformasi dengan objek JSON jauh lebih mudah daripada mengimplementasikan parser XML lengkap untuk mengurai XSLT. Masalahnya adalah, bahwa untuk menggunakan templat XML untuk mengubah objek JSON Anda harus menguraikan XML templat.
Untuk mentransformasi objek JSON dengan XML (atau HTML, atau teks atau apa pun), Anda perlu memikirkan dengan seksama tentang sintaks dan karakter khusus apa yang perlu Anda gunakan untuk mengidentifikasi perintah transformasi. Kalau tidak, Anda akhirnya harus merancang parser untuk bahasa templating kustom Anda sendiri. Setelah berjalan melalui jalan itu, saya dapat memberi tahu Anda bahwa itu tidak cantik.
Pembaruan (12 Nov 2010): Setelah beberapa minggu mengerjakan parser saya, saya sudah bisa mengoptimalkannya. Templat diuraikan sebelumnya dan perintah disimpan sebagai objek JSON. Aturan transformasi juga objek JSON, sedangkan kode templat adalah campuran dari HTML dan sintaksis homebrew yang mirip dengan kode shell. Saya sudah bisa mengubah dokumen JSON yang kompleks menjadi HTML untuk membuat editor dokumen. Kode ini sekitar 1K baris untuk editor (ini untuk proyek pribadi jadi saya tidak bisa membagikannya) dan sekitar 990 baris untuk kode transformasi JSON (termasuk perintah iterasi, perbandingan sederhana, panggilan templat, penyimpanan variabel dan evaluasi). Saya berencana untuk merilisnya di bawah lisensi MIT. Kirimi saya surat jika Anda ingin terlibat.
sumber
Saya menulis perpustakaan kecil saya sendiri di sekitar ini, baru-baru ini, yang mencoba untuk tetap sedekat itu
5.1 Model Pemrosesan (XSLT REC) https://www.w3.org/TR/xslt#section-Process--Model
seperti yang dimungkinkan (seperti yang saya bisa tetap), dalam beberapa baris kode JavaScript.
Berikut adalah beberapa contoh penggunaan yang tidak sepenuhnya sepele ...
1. JSON-to-some-markup:
Fiddle: https://jsfiddle.net/YSharpLanguage/kj9pk8oz/10
(terinspirasi oleh Contoh Dokumen D.1 (XSLT REC) https://www.w3.org/TR/xslt#section-Document-Example )
dimana ini:
... memberi:
dan
2. JSON-to-JSON:
Fiddle: https://jsfiddle.net/YSharpLanguage/ppfmmu15/10
dimana ini:
... memberi:
3. XSLT vs JavaScript:
Setara dengan JavaScript ...
XSLT 3.0 REC Bagian 14.4 Contoh: Pengelompokan Node berdasarkan Nilai Umum
(di: http://jsfiddle.net/YSharpLanguage/8bqcd0ey/1 )
Lih https://www.w3.org/TR/xslt-30/#grouping-examples
dimana...
... memberi:
4. JSONiq vs. JavaScript:
Setara dengan JavaScript ...
JSONiq Use Cases Bagian 1.1.2. Kueri Pengelompokan untuk JSON
(di: https://jsfiddle.net/YSharpLanguage/hvo24hmk/3 )
Lih http://jsoniq.org/docs/JSONiq-usecases/html-single/index.html#jsongrouping
dimana...
... memberi:
Ini juga berguna untuk mengatasi keterbatasan JSONPath wrt. menanyakan terhadap sumbu leluhur, seperti yang diajukan oleh pertanyaan SO ini (dan tentu saja yang lain).
Misalnya, bagaimana cara mendapatkan diskon dari barang grosir mengetahui id mereknya, di
?
Solusi yang mungkin adalah:
... pemberian yang mana:
'HTH,
sumber
Ada sekarang! Saya baru-baru ini membuat perpustakaan, json-transforms , tepatnya untuk tujuan ini:
https://github.com/ColinEberhardt/json-transforms
Ini menggunakan kombinasi JSPath , DSL yang dimodelkan pada XPath, dan pendekatan pencocokan pola rekursif, terinspirasi langsung oleh XSLT.
Ini contoh singkatnya. Diberikan objek JSON berikut:
Inilah transformasi:
Yang menghasilkan sebagai berikut:
Transformasi ini terdiri dari tiga aturan. Yang pertama cocok dengan mobil apa pun yang dibuat oleh Honda, memancarkan objek dengan
Honda
properti, kemudian secara rekursif cocok. Aturan kedua cocok dengan objek apa pun denganmaker
properti, mengeluarkanmodel
danyear
properti. Final adalah transformasi identitas yang cocok secara rekursif.sumber
Sebagai jawaban baru untuk pertanyaan lama, saya sarankan untuk melihat DefiantJS . Ini bukan XSLT setara untuk JSON, itu adalah XSLT untuk JSON. Bagian "Templating" dari dokumentasi termasuk contoh ini:
sumber
Saya benar-benar bosan dengan sejumlah besar mesin templating JavaScript di luar sana, dan semua templat HTML inline, gaya markup yang berbeda, dll., Dan memutuskan untuk membangun perpustakaan kecil yang memungkinkan pemformatan XSLT untuk memformat struktur data JSON. Bukan ilmu roket dengan cara apa pun - itu hanya JSON yang diuraikan ke XML dan kemudian diformat dengan dokumen XSLT. Ini juga cepat, tidak secepat mesin templat JavaScript di Chrome, tetapi di sebagian besar peramban lain setidaknya secepat mesin JS alternatif untuk struktur data yang lebih besar.
sumber
Saya menggunakan rute unta umarshal (xmljson) -> ke (xlst) -> marshal (xmljson). Cukup efisien (meski tidak 100% sempurna), tetapi sederhana, jika Anda sudah menggunakan Camel.
sumber
JSONiq adalah standar seperti itu dan Zorba merupakan implementasi C ++ open-source. JSONiq juga dapat dilihat sebagai XQuery dengan menambahkan JSON sebagai tipe data asli.
sumber
sangat mungkin untuk mengkonversi JSON menggunakan XSLT: Anda memerlukan deserializer JSON2SAX dan serializer SAX2JSON.
Kode contoh di Jawa: http://www.gerixsoft.com/blog/json/xslt4json
sumber
Yate ( https://github.com/pasaran/yate ) dirancang khusus setelah XSLT, fitur JPath (setara XPath alami untuk JS), dikompilasi dengan JavaScript dan memiliki riwayat penggunaan produksi yang cukup. Ini praktis tidak berdokumen, tetapi membaca sampel dan tes harus cukup.
sumber
JSLT sangat dekat dengan JSON yang setara dengan XSLT. Ini adalah bahasa transformasi tempat Anda menulis bagian tetap dari output dalam sintaks JSON, lalu menyisipkan ekspresi untuk menghitung nilai yang ingin Anda sisipkan di templat.
Sebuah contoh:
Ini diterapkan di Jawa di atas Jackson.
sumber
Tidak terlalu yakin ada kebutuhan untuk ini, dan bagi saya kurangnya alat menunjukkan kurangnya kebutuhan. JSON paling baik diproses sebagai objek (seperti yang dilakukan di JS), dan Anda biasanya menggunakan bahasa objek itu sendiri untuk melakukan transformasi (Java untuk objek Java yang dibuat dari JSON, sama untuk Perl, Python, Perl, c #, PHP dan sebagainya di). Hanya dengan penugasan normal (atau set, dapatkan), perulangan dan sebagainya.
Maksud saya, XSLT hanyalah bahasa lain, dan satu alasan diperlukan adalah bahwa XML bukan notasi objek dan dengan demikian objek bahasa pemrograman tidak cocok secara tepat (impedansi antara model xml hierarkis dan objek / objek / struct).
sumber
name
danaddress
, dan meletakkannya dalam array:[.name, .address]
Mengapa Anda tidak mengkonversi JSON ke XML menggunakan Mr. Data Coverter , mentransformasinya menggunakan XSLT dan kemudian mengubahnya kembali ke JSON menggunakan yang sama.
sumber
Untuk orat-oret kerja / bukti konsep pendekatan untuk memanfaatkan JavaScript murni bersama dengan pola akrab dan deklaratif di balik ekspresi pencocokan XSLT dan templat rekursif, lihat https://gist.github.com/brettz9/0e661b3093764f496e36
(Pendekatan serupa mungkin diambil untuk JSON.)
Perhatikan bahwa demo juga bergantung pada penutupan ekspresi JavaScript 1.8 untuk kenyamanan dalam mengekspresikan template di Firefox (setidaknya sampai bentuk pendek ES6 untuk metode dapat diterapkan).
Penafian: Ini adalah kode saya sendiri.
sumber
Saya menulis adaptor dom untuk kerangka kerja json berbasis jackson saya sejak lama. Ini menggunakan perpustakaan nu.xom. Pohon dom yang dihasilkan berfungsi dengan fasilitas xpath dan xslt java. Saya membuat beberapa pilihan implementasi yang cukup mudah. Misalnya simpul root selalu disebut "root", array masuk ke simpul ol dengan sub elemen li (seperti dalam html), dan segala sesuatu yang lain hanyalah sub node dengan nilai primitif atau node objek lain.
JsonXmlConverter.java
Pemakaian:
JsonObject sampleJson = sampleJson(); org.w3c.dom.Document domNode = JsonXmlConverter.getW3cDocument(sampleJson, "root");
sumber
Satu pendekatan yang belum diberikan adalah menggunakan generator parser untuk membuat parser di XSLT yang mem-parsing JSON dan menghasilkan output XML.
Salah satu opsi yang banyak disebutkan di konferensi XML adalah generator parser ReX ( http://www.bottlecaps.de/rex/ ) - meskipun benar-benar tidak berdokumen di situs, resep tersedia untuk pencarian.
sumber
Dimungkinkan untuk menggunakan XSLT dengan JSON. Ayat 3 dari XPath (3.1) XSLT (3.0) dan XQuery (3.1) mendukung JSON dalam beberapa cara. Ini tampaknya tersedia dalam versi komersial Saxon, dan mungkin pada beberapa titik dimasukkan dalam versi HE. https://www.saxonica.com/html/documentation/functions/fn/parse-json.html
-
Apa yang saya harapkan dari solusi alternatif:
Saya ingin dapat memasukkan JSON untuk mengambil satu set data yang cocok, dan output JSON atau TEXT.
Akses properti sewenang-wenang dan evaluasi nilainya
Dukungan untuk logika kondisional
Saya ingin skrip transformasi eksternal dari alat, berbasis teks, dan lebih disukai bahasa yang umum digunakan.
Alternatif potensial?
Saya ingin tahu apakah SQL bisa menjadi alternatif yang cocok. https://docs.microsoft.com/en-us/sql/relational-databases/json/json-data-sql-server
Akan lebih baik jika alat alternatif dapat menangani JSON dan XML https://docs.microsoft.com/en-us/sql/relational-databases/xml/openxml-sql-server
Saya belum mencoba untuk mengkonversi skrip XSLT yang saya gunakan ke SQL, atau sepenuhnya mengevaluasi opsi ini, tetapi saya berharap untuk melihatnya lebih cepat. Hanya beberapa pemikiran sejauh ini.
sumber