Memformat hasil kueri sebagai JSON dengan FOR JSON

Berlaku untuk: SQL Server 2016 (13.x) dan yang lebih baru Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (hanya kumpulan SQL tanpa server)

Format hasil kueri sebagai JSON, atau ekspor data dari SQL Server sebagai JSON, dengan menambahkan FOR JSON klausa ke SELECT pernyataan. FOR JSON Gunakan klausul untuk menyederhanakan aplikasi klien dengan mendelegasikan pemformatan output JSON dari aplikasi ke SQL Server.

Catatan

Azure Data Studio adalah editor kueri yang direkomendasikan untuk kueri JSON karena memformat hasil JSON secara otomatis, seperti yang ditunjukkan dalam artikel ini. SQL Server Management Studio menampilkan string yang tidak diformat.

Memformat hasil kueri

Saat Anda menggunakan FOR JSON klausul, Anda dapat menentukan struktur output JSON secara eksplisit, atau membiarkan struktur SELECT pernyataan menentukan output.

  • Untuk mempertahankan kontrol penuh atas format output JSON, gunakan FOR JSON PATH. Anda dapat membuat objek pembungkus dan properti kompleks sarang.

  • Untuk memformat output JSON secara otomatis berdasarkan struktur SELECT pernyataan, gunakan FOR JSON AUTO.

Berikut adalah contoh SELECT pernyataan dengan FOR JSON klausul dan outputnya.

Diagram showing how FOR JSON works.

Mengontrol output dengan FOR JSON PATH

Dalam PATH mode, Anda dapat menggunakan sintaks titik - misalnya, Item.Price - untuk memformat output berlapis.

Berikut adalah contoh kueri yang menggunakan mode dengan FOR JSON klausaPATH. Contoh berikut juga menggunakan ROOT opsi untuk menentukan elemen akar bernama.

Diagram of flow of FOR JSON output.

Info selengkapnya tentang FOR JSON PATH

Untuk informasi dan contoh yang lebih rinci, lihat Memformat Output JSON Berlapis dengan Mode PATH (SQL Server).

Untuk sintaks dan penggunaan, lihat Klausul FOR (Transact-SQL).

Mengontrol opsi output JSON lainnya

Kontrol output FOR JSON klausa, menggunakan opsi tambahan berikut.

  • ROOT

    Untuk menambahkan elemen tingkat atas tunggal ke output JSON, tentukan ROOT opsi . Jika Anda tidak menentukan opsi ini, output JSON tidak memiliki elemen root. Untuk informasi selengkapnya, lihat Menambahkan Simpul Akar ke Output JSON dengan Opsi ROOT (SQL Server).

  • INCLUDE_NULL_VALUES

    Untuk menyertakan nilai null dalam output JSON, tentukan INCLUDE_NULL_VALUES opsi . Jika Anda tidak menentukan opsi ini, output tidak menyertakan properti JSON untuk NULL nilai dalam hasil kueri. Untuk informasi selengkapnya, lihat Menyertakan Nilai Null di Opsi JSON - INCLUDE_NULL_VALUES.

  • WITHOUT_ARRAY_WRAPPER

    Untuk menghapus tanda kurung siku yang mengelilingi output JSON klausul FOR JSON secara default, tentukan WITHOUT_ARRAY_WRAPPER opsi . Gunakan opsi ini untuk menghasilkan satu objek JSON sebagai output dari hasil satu baris. Jika Anda tidak menentukan opsi ini, output JSON diformat sebagai array - yaitu, output diapit dalam tanda kurung siku. Untuk informasi selengkapnya, lihat Menghapus Kurung Siku dari JSON - opsi WITHOUT_ARRAY_WRAPPER.

Output klausul FOR JSON

Output FOR JSON klausul memiliki karakteristik berikut:

  1. Kumpulan hasil berisi satu kolom.

    • Kumpulan hasil kecil dapat berisi satu baris.
    • Kumpulan hasil besar membagi string JSON panjang di beberapa baris.
      • Secara default, SQL Server Management Studio (SSMS) menggabungkan hasil menjadi satu baris saat pengaturan output adalah Hasil ke Kisi. Bilah status SSMS menampilkan jumlah baris aktual.

      • Aplikasi klien lain mungkin memerlukan kode untuk merecombine hasil panjang menjadi satu string JSON yang valid dengan menggabungkan konten beberapa baris. Untuk contoh kode ini dalam aplikasi C#, lihat Menggunakan output FOR JSON di aplikasi klien C#.

        Screenshot of FOR JSON output in SQL Server Management Studio.

  2. Hasilnya diformat sebagai array objek JSON.

    • Jumlah elemen dalam array JSON sama dengan jumlah baris dalam hasil pernyataan SELECT (sebelum klausul FOR JSON diterapkan).

    • Setiap baris dalam hasil pernyataan SELECT (sebelum klausul FOR JSON diterapkan) menjadi objek JSON terpisah dalam array.

    • Setiap kolom dalam hasil pernyataan SELECT (sebelum klausul FOR JSON diterapkan) menjadi properti objek JSON.

  3. Nama kolom dan nilainya lolos sesuai dengan sintaks JSON. Untuk informasi selengkapnya, lihat Cara JSON meloloskan karakter khusus dan karakter kontrol (SQL Server).

Contoh

Berikut adalah contoh yang menunjukkan bagaimana FOR JSON klausul memformat output JSON.

Hasil kueri

A B C D
10 11 12 X
20 21 22 Y
30 31 32 Z

Output JSON

[{
    "A": 10,
    "B": 11,
    "C": 12,
    "D": "X"
}, {
    "A": 20,
    "B": 21,
    "C": 22,
    "D": "Y"
}, {
    "A": 30,
    "B": 31,
    "C": 32,
    "D": "Z"
}]