Formátovat vnořený výstup JSON pomocí režimu 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.

Následující příklady ukazují, jak používat FOR JSON klauzuli 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 příkladech. Ve výchozím nastavení nejsou hodnoty null zahrnuty ve výstupu FOR JSON.

Poznámka:

Rozšíření MSSQL pro Visual Studio Code může automaticky formátovat výsledky JSON (jak je vidět v tomto článku) místo zobrazení neformátovaného řetězce.

Examples

Ukázky kódu v tomto článku používají ukázkovou databázi AdventureWorks2025 nebo AdventureWorksDW2025, kterou si můžete stáhnout z domovské stránky Microsoft SQL Serveru pro ukázky a komunitní projekty .

A. 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.

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

Tady je soubor výsledků.

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

B. 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 pro každou (OrderHeader, OrderDetails) dvojici, ke které se dotaz připojí.

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 AS H
     INNER JOIN Sales.SalesOrderDetail AS D
         ON H.SalesOrderID = D.SalesOrderID
FOR JSON PATH;

Tady je soubor výsledků.

[{
    "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 tématu JSON jako most mezi NoSQL a relačními světy.