Sdílet prostřednictvím


Formátování vnořeného výstupu JSON s režimem PATH

Platí pro: SQL Server 2016 (13.x) a novější verze Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (pouze bezserverový fond SQL)Koncový bod analýzy SQL ve službě Microsoft FabricSklad v Microsoft FabricSQL databáze v Microsoft Fabric

Pokud chcete zachovat úplnou kontrolu nad výstupem FOR JSON klauzule, zadejte PATH možnost.

režim PATH umožňuje vytvářet objekty obálky a vnořit složité vlastnosti. Výsledky jsou formátovány jako pole objektů JSON.

Alternativou je použití AUTO možnosti automatického formátování výstupu SELECT na základě struktury příkazu.

Tady je několik příkladů FOR JSON klauzule s PATH možností. Naformátujte vnořené výsledky pomocí názvů sloupců oddělených tečkami nebo pomocí vnořených dotazů, jak je znázorněno v následujících příkladech. Ve výstupu FOR JSON nejsou ve výchozím nastavení zahrnuty hodnoty null. Azure Data Studio je doporučeným editorem dotazů pro dotazy JSON, protože automaticky formátuje výsledky JSON (jak je vidět v tomto článku) místo zobrazení plochého řetězce.

Příklad – názvy sloupců oddělených tečkami

Následující dotaz naformátuje prvních pět řádků z tabulky AdventureWorks Person jako JSON.

Klauzule FOR JSON PATH používá alias sloupce nebo název sloupce k určení názvu klíče ve výstupu JSON. Pokud alias obsahuje tečky, PATH možnost vytvoří vnořené objekty.

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

Příklad – více tabulek

Pokud v dotazu odkazujete na více než jednu tabulku, FOR JSON PATH vnořuje každý sloupec pomocí jeho aliasu. Následující dotaz vytvoří jeden objekt JSON na každý pár (OrderHeader, OrderDetails) sloučený v dotazu.

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
    }
}]

Další informace o formátu JSON v databázovém stroji SQL

Vizuální úvod k integrované podpoře JSON najdete v následujících videích: