Formatera kapslade JSON-utdata med PATH-läge

Gäller för: SQL Server 2016 (13.x) och senare versioner Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (endast serverlös SQL-pool)SQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft FabricSQL-databas i Microsoft Fabric

Om du vill behålla fullständig kontroll över satsens FOR JSON utdata anger du alternativet PATH .

I läget PATH kan du skapa wrapperobjekt och kapsla in komplexa egenskaper. Resultatet formateras som en matris med JSON-objekt.

Alternativet är att använda AUTO alternativet för att formatera utdata automatiskt baserat på instruktionens SELECT struktur.

I följande exempel visas hur du använder FOR JSON -satsen med alternativet PATH . Formatera kapslade resultat med hjälp av punktavgränsade kolumnnamn eller med hjälp av kapslade frågor, som du ser i exemplen. Som standard ingår inte null-värden i FOR JSON utdata.

Anmärkning

MSSQL-tillägget för Visual Studio Code kan automatiskt formatera JSON-resultaten (som du ser i den här artikeln) i stället för att visa en oformaterad sträng.

Examples

Kodexemplen i denna artikel använder AdventureWorks2025 exempeldatabasenAdventureWorksDW2025, som du kan ladda ner från Azure Data SQL Samples Repository GitHub-arkivet.

A. Punktavgränsade kolumnnamn

Följande fråga formaterar de första fem raderna från tabellen AdventureWorks Person som JSON.

Satsen FOR JSON PATH använder kolumnaliaset eller kolumnnamnet för att fastställa nyckelnamnet i JSON-utdata. Om ett alias innehåller punkter PATH skapar alternativet kapslade objekt.

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

Här är resultatet.

[{
    "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. Flera tabeller

Om du refererar till fler än en tabell i en fråga kapslas FOR JSON PATH varje kolumn med hjälp av dess alias. Följande fråga skapar ett JSON-objekt för varje (OrderHeader, OrderDetails) par som frågan ansluter till.

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;

Här är resultatet.

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

Läs mer om JSON i SQL Database Engine

En visuell introduktion till det inbyggda JSON-stödet finns i JSON som en brygga mellan NoSQL och relationsvärldar.