Di SQL Server Anda dapat menggunakan FOR JSON
klausa dalam kueri untuk memformat hasil sebagai JSON. Saat melakukan ini, Anda harus memilih AUTO
atau PATH
pilihan. Artikel ini berisi contoh penggunaan AUTO
pilihan.
Sintaks
Sintaksnya seperti ini:
SELECT ... (your query goes here) FOR JSON AUTO;
Jadi pada dasarnya, yang perlu Anda lakukan hanyalah menambahkan FOR JSON AUTO
ke akhir kueri Anda.
Contoh 1 – Penggunaan Dasar
Berikut ini contoh untuk didemonstrasikan.
USE Music; SELECT TOP 3 AlbumName, ReleaseDate FROM Albums FOR JSON AUTO;
Hasil:
[ { "AlbumName": "Powerslave", "ReleaseDate": "1984-09-03" }, { "AlbumName": "Powerage", "ReleaseDate": "1978-05-05" }, { "AlbumName": "Singing Down the Lane", "ReleaseDate": "1956-01-01" } ]
Jadi hasilnya keluar sebagai dokumen JSON yang diformat dengan baik, bukan dalam baris dan kolom.
Dalam hal ini saya menggunakan TOP 3
untuk membatasi hasil yang disetel menjadi hanya tiga hasil.
Hasil Satu Baris?
Hasil Anda mungkin awalnya muncul dalam satu baris dan satu kolom, dan sebagai satu baris panjang seperti ini:
Jika ini masalahnya, coba klik kumpulan hasil. Bergantung pada perangkat lunak manajemen basis data Anda, ini akan meluncurkan dokumen JSON seperti yang muncul pada contoh di atas.
Apakah ini berfungsi persis seperti yang dijelaskan akan bergantung pada perangkat lunak yang Anda gunakan untuk mengkueri SQL Server.
Pada saat penulisan, ini berfungsi dengan baik untuk saya saat menggunakan SQL Operations Studio (yang telah diubah namanya menjadi Azure Data Studio). Ini juga berfungsi dengan baik saat menggunakan ekstensi MSSQL di VS Code. Namun SSMS hanya memformat hasil sebagai satu baris panjang (meskipun masih dalam format JSON).
Saya juga memiliki berbagai tingkat keberhasilan menggunakan alat baris perintah.
Anda mungkin juga menemukan bahwa hasil awalnya didistribusikan di beberapa baris, tergantung pada seberapa besar kumpulan hasil.
Jika Anda tidak dapat menampilkan hasil dengan cara yang memuaskan, coba alat lain.
Contoh 2 – Kueri di Beberapa Tabel
Dalam contoh ini, saya meminta dua tabel yang memiliki hubungan satu-ke-banyak di antara mereka. Dalam hal ini, setiap artis dapat memiliki banyak album.
USE Music; SELECT ArtistName, AlbumName FROM Artists INNER JOIN Albums ON Artists.ArtistId = Albums.ArtistId ORDER BY ArtistName FOR JSON AUTO;
Hasil:
[ { "ArtistName": "AC/DC", "Albums": [ { "AlbumName": "Powerage" } ] }, { "ArtistName": "Allan Holdsworth", "Albums": [ { "AlbumName": "All Night Wrong" }, { "AlbumName": "The Sixteen Men of Tain" } ] }, { "ArtistName": "Buddy Rich", "Albums": [ { "AlbumName": "Big Swing Face" } ] }, { "ArtistName": "Devin Townsend", "Albums": [ { "AlbumName": "Ziltoid the Omniscient" }, { "AlbumName": "Casualties of Cool" }, { "AlbumName": "Epicloud" } ] }, { "ArtistName": "Iron Maiden", "Albums": [ { "AlbumName": "Powerslave" }, { "AlbumName": "Somewhere in Time" }, { "AlbumName": "Piece of Mind" }, { "AlbumName": "Killers" }, { "AlbumName": "No Prayer for the Dying" } ] }, { "ArtistName": "Jim Reeves", "Albums": [ { "AlbumName": "Singing Down the Lane" } ] }, { "ArtistName": "Michael Learns to Rock", "Albums": [ { "AlbumName": "Blue Night" }, { "AlbumName": "Eternity" }, { "AlbumName": "Scandinavia" } ] }, { "ArtistName": "The Script", "Albums": [ { "AlbumName": "No Sound Without Silence" } ] }, { "ArtistName": "Tom Jones", "Albums": [ { "AlbumName": "Long Lost Suitcase" }, { "AlbumName": "Praise and Blame" }, { "AlbumName": "Along Came Jones" } ] } ]
Seperti yang Anda lihat, setiap album telah disarangkan di bawah "Album". Ini karena AUTO
option menentukan output berdasarkan urutan kolom di SELECT
list dan tabel sumbernya.
Contoh 3 – Tambahkan Node Root
Anda dapat menggunakan ROOT()
opsi untuk menambahkan simpul root ke output. Ini menambahkan satu elemen tingkat atas ke output. Untuk melakukannya, cukup tambahkan ROOT()
opsi ke akhir kueri, dengan nama yang Anda inginkan untuk dimiliki oleh simpul akar.
Jadi kita bisa memodifikasi contoh sebelumnya menjadi ini:
USE Music; SELECT TOP 3 ArtistName, AlbumName FROM Artists INNER JOIN Albums ON Artists.ArtistId = Albums.ArtistId ORDER BY ArtistName FOR JSON AUTO, ROOT('Music');
Hasil:
{ "Music": [ { "ArtistName": "AC/DC", "Albums": [ { "AlbumName": "Powerage" } ] }, { "ArtistName": "Allan Holdsworth", "Albums": [ { "AlbumName": "All Night Wrong" }, { "AlbumName": "The Sixteen Men of Tain" } ] } ] }
Saya juga membatasi hasil yang ditetapkan hanya tiga hasil dengan menambahkan TOP 3
ke kueri.
Contoh 4 – Hapus Pembungkus Array
Anda dapat menggunakan WITHOUT_ARRAY_WRAPPER
opsi untuk menghapus tanda kurung siku yang mengelilingi hasil.
Contoh:
USE Music; SELECT TOP 1 AlbumName, ReleaseDate FROM Albums FOR JSON AUTO, WITHOUT_ARRAY_WRAPPER;
Hasil:
{ "AlbumName": "Powerslave", "ReleaseDate": "1984-09-03" }
Perhatikan bahwa jika Anda melakukan ini pada hasil beberapa baris, Anda akan mendapatkan JSON yang tidak valid.