Delen via


Geneste JSON-uitvoer opmaken met PATH-modus

van toepassing op: SQL Server 2016 (13.x) en latere versies Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (alleen serverloze SQL-pool)SQL Analytics-eindpunt in Microsoft FabricWarehouse in Microsoft Fabric

Als u de volledige controle over de uitvoer van de FOR JSON-component wilt behouden, geeft u de optie PATH op.

PATH modus stelt u in staat wrapperobjecten te maken en complexe eigenschappen te nesten. De resultaten worden opgemaakt als een matrix van JSON-objecten.

Het alternatief is om de AUTO optie te gebruiken om de uitvoer automatisch op te maken op basis van de structuur van de SELECT-instructie.

Hier volgen enkele voorbeelden van de FOR JSON clausule met de optie PATH. Formatteer geneste resultaten met gebruik van puntgescheiden kolomnamen of geneste queries, zoals geïllustreerd in de volgende voorbeelden. Null-waarden worden standaard niet opgenomen in FOR JSON uitvoer. Azure Data Studio- is de aanbevolen queryeditor voor JSON-query's omdat de JSON-resultaten automatisch worden opgemaakt (zoals in dit artikel wordt weergegeven) in plaats van een platte tekenreeks weer te geven.

Voorbeeld: door punt gescheiden kolomnamen

Met de volgende query worden de eerste vijf rijen uit de tabel AdventureWorks Person opgemaakt als JSON.

De FOR JSON PATH component maakt gebruik van de kolomalias of kolomnaam om de sleutelnaam in de JSON-uitvoer te bepalen. Als een alias puntjes bevat, worden met de optie PATH geneste objecten gemaakt.

Query

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

resultaat

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

Voorbeeld: meerdere tabellen

Als u naar meer dan één tabel in een query verwijst, nestelt FOR JSON PATH de kolommen met behulp van de bijbehorende alias. Met de volgende query wordt voor elk (OrderHeader, OrderDetails)-paar dat in de query wordt samengevoegd één JSON-object gecreëerd.

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   

resultaat

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

Meer informatie over JSON in de SQL Database Engine

Zie de volgende video's voor een visuele inleiding tot de ingebouwde JSON-ondersteuning in SQL Server en Azure SQL Database: