Dela via


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 Database i Förhandsversion av Microsoft Fabric

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

PATH läge kan du skapa omslutningsobjekt och kapsla 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.

Här följer några exempel på FOR JSON-satsen med alternativet PATH. Formatera kapslade resultat med hjälp av punktavgränsade kolumnnamn eller med hjälp av kapslade frågor, enligt följande exempel. Som standard ingår inte null-värden i FOR JSON utdata. Azure Data Studio är den rekommenderade frågeredigeraren för JSON-frågor eftersom det automatiskt formaterar JSON-resultaten (som du ser i den här artikeln) i stället för att visa en platt sträng.

Exempel – 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.

Query

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

Result

[{
    "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"
    }
}]

Exempel – 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 per (OrderHeader, OrderDetails) par som är anslutna till frågan.

Query

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 H  
   INNER JOIN Sales.SalesOrderDetail D  
     ON H.SalesOrderID = D.SalesOrderID  
FOR JSON PATH   

Result

[{
    "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 följande videor: