Dela via


Formatera kapslade JSON-utdata med PATH-läge (SQL Server)

gäller för: SQL Server 2016 (13.x) och senare Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (endast serverlös SQL-pool)

Om du vill behålla fullständig kontroll över utdata från FOR JSON--satsen anger du alternativet PATH.

PATH-läge låter dig skapa omslagsobjekt och kapsla in komplexa egenskaper. Resultatet formateras som en matris med JSON-objekt.

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

Här följer några exempel på satsen FOR JSON 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 FÖR 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 skapar alternativet PATH kapslade objekt.

Fråga

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

resultat

[{
    "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 FOR JSON PATH kapslar 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.

Fråga

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   

resultat

[{
    "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 Server och Azure SQL Database

Microsoft-videor

En visuell introduktion till det inbyggda JSON-stödet i SQL Server och Azure SQL Database finns i följande videor:

Se även

FOR-klausul (Transact-SQL)