Delen via


JSON-uitvoer automatisch opmaken met automodus

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 uitvoer van de FOR JSON-component automatisch wilt opmaken op basis van de structuur van de SELECT-instructie, selecteert u de optie AUTO.

Wanneer u de optie AUTO opgeeft, wordt de indeling van de JSON-uitvoer automatisch bepaald op basis van de volgorde van kolommen in de SELECT-lijst en de bijbehorende brontabellen. U kunt deze indeling niet wijzigen.

Het alternatief is om de optie PATH te gebruiken om de controle over de uitvoer te behouden.

Een query die gebruikmaakt van de optie FOR JSON AUTO moet een FROM component hebben.

Hier volgen enkele voorbeelden van de FOR JSON clausule met de optie AUTO. 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.

Voorbeelden

Voorbeeld 1

Query

Wanneer een query slechts naar één tabel verwijst, zijn de resultaten van de FOR JSON AUTO component vergelijkbaar met de resultaten van FOR JSON PATH. In dit geval maakt FOR JSON AUTO geen geneste objecten. Het enige verschil is dat FOR JSON AUTO punt-gescheiden aliassen (bijvoorbeeld Info.MiddleName in het volgende voorbeeld) uitvoert als sleutels met punten, niet als geneste objecten.

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

resultaat

[{
    "Id": 1,
    "FirstName": "Ken",
    "LastName": "Sánchez",
    "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.",
    "Info.MiddleName": "A"
}]

Voorbeeld 2

Query

Wanneer u tabellen samenvoegt, worden kolommen in de eerste tabel gegenereerd als eigenschappen van het hoofdobject. Kolommen in de tweede tabel worden gegenereerd als eigenschappen van een genest object. De tabelnaam of alias van de tweede tabel (bijvoorbeeld D in het volgende voorbeeld) wordt gebruikt als de naam van de geneste matrix.

SELECT TOP 2 SalesOrderNumber,  
        OrderDate,  
        UnitPrice,  
        OrderQty  
FROM Sales.SalesOrderHeader H  
   INNER JOIN Sales.SalesOrderDetail D  
     ON H.SalesOrderID = D.SalesOrderID  
FOR JSON AUTO   

resultaat

[{
    "SalesOrderNumber": "SO43659",
    "OrderDate": "2011-05-31T00:00:00",
    "D": [{
        "UnitPrice": 24.99,
        "OrderQty": 1
    }]
}, {
    "SalesOrderNumber": "SO43659",
    "D": [{
        "UnitPrice": 34.40
    }, {
        "UnitPrice": 134.24,
        "OrderQty": 5
    }]
}]

Voorbeeld 3

Query
In plaats van FOR JSON AUTO te gebruiken, kunt u een FOR JSON PATH-subquery nesten in de SELECT-instructie, zoals wordt weergegeven in het volgende voorbeeld. In dit voorbeeld wordt hetzelfde resultaat uitgevoerd als in het voorgaande voorbeeld.

SELECT TOP 2  
    SalesOrderNumber,  
    OrderDate,  
    (SELECT UnitPrice, OrderQty  
      FROM Sales.SalesOrderDetail AS D  
      WHERE H.SalesOrderID = D.SalesOrderID  
     FOR JSON PATH) AS D  
FROM Sales.SalesOrderHeader AS H  
FOR JSON PATH  

resultaat

[{
    "SalesOrderNumber": "SO43659",
    "OrderDate": "2011-05-31T00:00:00",
    "D": [{
        "UnitPrice": 24.99,
        "OrderQty": 1
    }]
}, {
    "SalesOrderNumber": "SO4390",
    "D": [{
        "UnitPrice": 24.99
    }]
}]

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: