Udostępnij za pośrednictwem


Formatowanie zagnieżdżonych danych wyjściowych JSON przy użyciu trybu PATH

Dotyczy: SQL Server 2016 (13.x) i nowsze wersje Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (tylko bezserwerowa pula SQL)Punkt końcowy analizy SQL w Microsoft FabricMagazyn w Microsoft FabricSQL database w wersji zapoznawczej Microsoft Fabric

Aby zachować pełną kontrolę nad danymi wyjściowymi klauzuli FOR JSON, określ opcję PATH.

tryb PATH umożliwia tworzenie obiektów opakowujących i zagnieżdżanie złożonych właściwości. Wyniki są formatowane jako tablica obiektów JSON.

Alternatywą jest użycie opcji AUTO do automatycznego formatowania danych wyjściowych na podstawie struktury instrukcji SELECT.

Poniżej przedstawiono kilka przykładów klauzuli FOR JSON z opcją PATH. Formatuj zagnieżdżone wyniki przy użyciu nazw kolumn rozdzielonych kropkami lub przy użyciu zagnieżdżonych zapytań, jak pokazano w poniższych przykładach. Domyślnie wartości null nie są uwzględniane w danych wyjściowych FOR JSON. Azure Data Studio jest zalecanym edytorem zapytań dla zapytań JSON, ponieważ automatycznie formatuje wyniki JSON (jak pokazano w tym artykule) zamiast wyświetlać jednowierszowy ciąg.

Przykład — nazwy kolumn rozdzielonych kropkami

Poniższe zapytanie formatuje pięć pierwszych wierszy z tabeli AdventureWorks Person jako kod JSON.

Klauzula FOR JSON PATH używa aliasu kolumny lub nazwy kolumny do określenia nazwy klucza w danych wyjściowych JSON. Jeśli alias zawiera kropki, opcja PATH tworzy zagnieżdżone obiekty.

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

Przykład — wiele tabel

Jeśli odwołujesz się do więcej niż jednej tabeli w zapytaniu, FOR JSON PATH zagnieżdża każdą kolumnę przy użyciu jej aliasu. Poniższe zapytanie tworzy jeden obiekt JSON dla każdej pary (OrderHeader, OrderDetails) połączonej w zapytaniu.

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

Dowiedz się więcej o JSON w silniku bazy danych SQL

Aby zapoznać się z wizualnym wprowadzeniem do wbudowanej obsługi kodu JSON, zobacz następujące wideo: