Sdílet prostřednictvím


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

platí pro: SQL Server 2016 (13.x) a novější Azure SQL Databaseazure SQL Managed InstanceAzure Synapse Analytics (jenom bezserverový fond SQL)

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

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

Alternativou je použít možnost AUTO k automatickému formátování výstupu na základě struktury příkazu SELECT.

Tady je několik příkladů klauzule FOR JSON s možností PATH. 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ýchozím nastavení nejsou hodnoty null zahrnuty do výstupu FOR JSON. 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, vytvoří možnost PATH vnořené objekty.

dotazu

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

výsledek

[{
    "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í svého aliasu. Následující dotaz vytvoří jeden objekt JSON pro každý pár (OrderHeader, OrderDetails).

dotazu

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   

výsledek

[{
    "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 SQL Serveru a Azure SQL Database

Microsoft videa

Pro vizuální úvod k vestavěné podpoře JSON v SQL Serveru a Azure SQL Database se podívejte na následující videa:

Viz také

klauzule FOR (Transact-SQL)