Saat menggunakan 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 PATH
pilihan.
Sintaks
Sintaksnya seperti ini:
SELECT ... (your query goes here) FOR JSON PATH;
Jadi pada dasarnya, yang perlu Anda lakukan hanyalah menambahkan FOR JSON PATH
ke akhir kueri Anda.
Contoh 1 – Penggunaan Dasar
Berikut ini contoh untuk didemonstrasikan.
USE Music; SELECT TOP 3 AlbumName, ReleaseDate FROM Albums FOR JSON PATH;
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, dan saya menggunakan subkueri untuk mengambil album untuk setiap artis.
USE Music; SELECT TOP 2 ArtistName, (SELECT AlbumName FROM Albums WHERE Artists.ArtistId = Albums.ArtistId FOR JSON PATH) AS Albums FROM Artists ORDER BY ArtistName FOR JSON PATH;
Hasil:
[ { "ArtistName": "AC/DC", "Albums": [ { "AlbumName": "Powerage" } ] }, { "ArtistName": "Allan Holdsworth", "Albums": [ { "AlbumName": "All Night Wrong" }, { "AlbumName": "The Sixteen Men of Tain" } ] } ]
Dalam hal ini, setiap album telah disarangkan di bawah "Album". Ini karena album dikembalikan melalui subkueri.
Contoh 3 – Output Bersarang dengan Notasi Titik
Saat menggunakan PATH
pilihan, Anda dapat menggunakan nama kolom yang dipisahkan titik untuk membuat objek bersarang.
Untuk melakukan ini, gunakan alias yang dipisahkan titik. Ini contohnya:
USE Music; SELECT TOP 3 AlbumId, AlbumName AS 'Details.Album Name', ReleaseDate AS 'Details.Release Date' FROM Albums FOR JSON PATH;
Hasil:
[ { "AlbumId": 1, "Details": { "Album Name": "Powerslave", "Release Date": "1984-09-03" } }, { "AlbumId": 2, "Details": { "Album Name": "Powerage", "Release Date": "1978-05-05" } }, { "AlbumId": 3, "Details": { "Album Name": "Singing Down the Lane", "Release Date": "1956-01-01" } } ]
Contoh 4 – 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 AlbumId, AlbumName AS 'Details.Album Name', ReleaseDate AS 'Details.Release Date' FROM Albums FOR JSON PATH, ROOT('Albums');
Hasil:
{ "Albums": [ { "AlbumId": 1, "Details": { "Album Name": "Powerslave", "Release Date": "1984-09-03" } }, { "AlbumId": 2, "Details": { "Album Name": "Powerage", "Release Date": "1978-05-05" } }, { "AlbumId": 3, "Details": { "Album Name": "Singing Down the Lane", "Release Date": "1956-01-01" } } ] }
Contoh 5 – 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 PATH, 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.