Dela via


Formatera JSON-utdata automatiskt med AUTO-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 Fabric

Om du vill formatera utdata för FOR JSON-satsen automatiskt baserat på strukturen för SELECT-instruktionen anger du alternativet AUTO.

När du anger alternativet AUTO bestäms formatet för JSON-utdata automatiskt baserat på ordningen på kolumnerna i SELECT-listan och deras källtabeller. Du kan inte ändra det här formatet.

Alternativet är att använda alternativet PATH för att behålla kontrollen över utdata.

En fråga som använder alternativet FOR JSON AUTO måste ha en FROM-sats.

Här följer några exempel på FOR JSON-satsen med alternativet AUTO. 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

Exempel 1

Fråga

När en fråga endast refererar till en tabell liknar resultatet av FOR JSON AUTO-satsen resultatet av FOR JSON PATH. I det här fallet skapar FOR JSON AUTO inte kapslade objekt. Den enda skillnaden är att FOR JSON AUTO matar ut punktavgränsade alias (till exempel Info.MiddleName i följande exempel) som nycklar med punkter, inte som kapslade objekt.

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

resultat

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

Exempel 2

Fråga

När du kopplar tabeller genereras kolumner i den första tabellen som egenskaper för rotobjektet. Kolumner i den andra tabellen genereras som egenskaper för ett kapslat objekt. Tabellnamnet eller aliaset för den andra tabellen (till exempel D i följande exempel) används som namnet på den kapslade matrisen.

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

resultat

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

Exempel 3

Fråga
I stället för att använda FOR JSON AUTO kan du kapsla en FOR JSON PATH-underfråga i SELECT-instruktionen, som du ser i följande exempel. Det här exemplet ger samma resultat som föregående exempel.

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  

resultat

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

Läs mer om JSON i SQL Database Engine

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