Bagikan melalui


Memformat output JSON berlapis dengan mode PATH

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (hanya kumpulan SQL tanpa server)Titik akhir analitik SQL di Microsoft FabricWarehouse di Microsoft FabricSQL database di Microsoft Fabric

Untuk mempertahankan kontrol penuh atas output klausa FOR JSON, tentukan opsi PATH.

mode PATH memungkinkan Anda membuat objek pembungkus dan properti kompleks sarang. Hasilnya diformat sebagai array objek JSON.

Alternatifnya adalah menggunakan opsi AUTO untuk memformat output secara otomatis berdasarkan struktur pernyataan SELECT.

Contoh berikut menunjukkan cara menggunakan FOR JSON klausa dengan PATH opsi . Format hasil berlapis dengan menggunakan nama kolom yang dipisahkan titik atau dengan menggunakan kueri berlapis, seperti yang ditunjukkan dalam contoh. Secara default, nilai null tidak disertakan dalam FOR JSON output.

Nota

Ekstensi MSSQL untuk Visual Studio Code dapat memformat hasil JSON secara otomatis (seperti yang terlihat dalam artikel ini) alih-alih menampilkan string yang tidak diformat.

Examples

Sampel kode dalam artikel ini menggunakan database sampel AdventureWorks2025 atau AdventureWorksDW2025, yang dapat Anda unduh dari halaman beranda Sampel dan Proyek Komunitas Microsoft SQL Server.

A. Nama kolom yang dipisahkan titik

Kueri berikut memformat lima baris pertama dari tabel AdventureWorks Person sebagai JSON.

Klausa FOR JSON PATH menggunakan alias kolom atau nama kolom untuk menentukan nama kunci dalam output JSON. Jika alias berisi titik-titik, opsi PATH membuat objek berlapis.

SELECT TOP 5 BusinessEntityID AS Id,
             FirstName,
             LastName,
             Title AS 'Info.Title',
             MiddleName AS 'Info.MiddleName'
FROM Person.Person
FOR JSON PATH;

Berikut kumpulan hasilnya.

[{
    "Id": 1,
    "FirstName": "Ken",
    "LastName": "Sanchez",
    "Info": {
        "MiddleName": "J"
    }
}, {
    "Id": 2,
    "FirstName": "Terri",
    "LastName": "Duffy",
    "Info": {
        "MiddleName": "Lee"
    }
}, {
    "Id": 3,
    "FirstName": "Roberto",
    "LastName": "Tamburello"
}, {
    "Id": 4,
    "FirstName": "Rob",
    "LastName": "Walters"
}, {
    "Id": 5,
    "FirstName": "Gail",
    "LastName": "Erickson",
    "Info": {
        "Title": "Ms.",
        "MiddleName": "A"
    }
}]

B. Beberapa tabel

Jika Anda mereferensikan lebih dari satu tabel dalam kueri, FOR JSON PATH menumpuk setiap kolom menggunakan aliasnya. Kueri berikut membuat satu objek JSON untuk setiap (OrderHeader, OrderDetails) pasangan yang bergabung dengan kueri.

SELECT TOP 2 H.SalesOrderNumber AS 'Order.Number',
             H.OrderDate AS 'Order.Date',
             D.UnitPrice AS 'Product.Price',
             D.OrderQty AS 'Product.Quantity'
FROM Sales.SalesOrderHeader AS H
     INNER JOIN Sales.SalesOrderDetail AS D
         ON H.SalesOrderID = D.SalesOrderID
FOR JSON PATH;

Berikut kumpulan hasilnya.

[{
    "Order": {
        "Number": "SO43659",
        "Date": "2011-05-31T00:00:00"
    },
    "Product": {
        "Price": 2024.9940,
        "Quantity": 1
    }
}, {
    "Order": {
        "Number": "SO43659"
    },
    "Product": {
        "Price": 2024.9940
    }
}]

Pelajari selengkapnya tentang JSON di SQL Database Engine

Untuk pengenalan visual dukungan JSON bawaan, lihat JSON sebagai jembatan antara NoSQL dan dunia relasional.