Udostępnij za pośrednictwem


Formatowanie wyników zapytania jako JSON z użyciem FOR JSON

Dotyczy:SQL ServerAzure SQL Managed InstanceAzure Synapse Analytics (tylko bezserwerowa pula SQL)punktu końcowego analizy SQL w usłudze Microsoft FabricWarehouse w usłudze Microsoft Fabric

Formatuj wyniki zapytania jako dane JSON lub eksportuj dane z programu SQL Server jako kod JSON, dodając klauzulę FOR JSON do instrukcji SELECT. Użyj klauzuli FOR JSON, aby uprościć aplikacje klienckie, delegując formatowanie danych wyjściowych JSON z aplikacji do programu SQL Server.

Notatka

Azure Data Studio jest zalecanym edytorem zapytań JSON, ponieważ automatycznie formatuje wyniki JSON, jak pokazano w tym artykule. Program SQL Server Management Studio wyświetla niesformatowany ciąg.

W Fabric Data Warehouse FOR JSON musi być ostatnim operatorem w zapytaniu i dlatego nie jest dozwolony wewnątrz podzapytań.

Formatowanie wyników zapytania

Jeśli używasz klauzuli FOR JSON, możesz jawnie określić strukturę danych wyjściowych JSON lub pozwolić strukturze instrukcji SELECT określić dane wyjściowe.

  • Aby zachować pełną kontrolę nad formatem danych wyjściowych JSON, użyj FOR JSON PATH. Można tworzyć obiekty opakowujące i zagnieżdżać właściwości złożone.

  • Aby automatycznie sformatować dane wyjściowe JSON na podstawie struktury instrukcji SELECT, użyj FOR JSON AUTO.

Oto przykład instrukcji SELECT z klauzulą FOR JSON i jej danymi wyjściowymi.

Diagram przedstawiający, jak działa FOR JSON.

Sterowanie danymi wyjściowymi za pomocą ścieżki JSON FOR

W trybie PATH można użyć składni kropki — na przykład Item.Price — do formatowania zagnieżdżonych danych wyjściowych.

Oto przykładowe zapytanie, które używa trybu PATH z klauzulą FOR JSON. W poniższym przykładzie użyto również opcji ROOT, aby określić nazwany element główny.

Diagram przepływu danych wyprowadzanych przez FOR JSON.

Więcej informacji o FOR JSON PATH

Aby uzyskać bardziej szczegółowe informacje i przykłady, zobacz Format zagnieżdżone dane wyjściowe JSON z trybem "PATH".

Aby uzyskać informacje o składni i użyciu, zobacz SELECT — FOR Clause (Transact-SQL).

Kontrolowanie innych opcji danych wyjściowych JSON

Kontroluj dane wyjściowe klauzuli FOR JSON, korzystając z poniższych dodatkowych opcji.

  • ROOT

    Aby dodać pojedynczy element najwyższego poziomu do danych wyjściowych JSON, określ opcję ROOT. Jeśli nie określisz tej opcji, dane wyjściowe JSON nie mają elementu głównego. Aby uzyskać więcej informacji, zobacz Dodawanie węzła głównego do danych wyjściowych JSON przy użyciu opcji ROOT (SQL Server).

  • INCLUDE_NULL_VALUES

    Aby uwzględnić wartości null w danych wyjściowych JSON, określ opcję INCLUDE_NULL_VALUES. Jeśli nie określisz tej opcji, dane wyjściowe nie zawierają właściwości JSON dla NULL wartości w wynikach zapytania. Aby uzyskać więcej informacji, zobacz Include Null Values in JSON - INCLUDE_NULL_VALUES Option(Uwzględnij wartości null w formacie JSON — opcja INCLUDE_NULL_VALUES).

  • WITHOUT_ARRAY_WRAPPER

    Aby usunąć nawiasy kwadratowe otaczające dane wyjściowe JSON klauzuli FOR JSON domyślnie, określ opcję WITHOUT_ARRAY_WRAPPER. Użyj tej opcji, aby wygenerować pojedynczy obiekt JSON jako dane wyjściowe z wyniku pojedynczego wiersza. Jeśli nie określisz tej opcji, dane wyjściowe JSON są formatowane jako tablica — czyli dane wyjściowe są ujęte w nawiasy kwadratowe. Aby uzyskać więcej informacji, zobacz Usuń nawiasy kwadratowe z formatu JSON — opcja WITHOUT_ARRAY_WRAPPER.

Dane wyjściowe klauzuli JSON FOR

Dane wyjściowe klauzuli FOR JSON mają następujące cechy:

  1. Zestaw wyników zawiera jedną kolumnę.

    • Mały zestaw wyników może zawierać jeden wiersz.
    • Duży zestaw wyników dzieli długi ciąg JSON między wiele wierszy.
      • Domyślnie program SQL Server Management Studio (SSMS) łączy wyniki w jeden wiersz, gdy ustawienie danych wyjściowych ma wartość Wyniki do siatki. Pasek stanu programu SSMS wyświetla rzeczywistą liczbę wierszy.

      • Inne aplikacje klienckie mogą wymagać kodu, aby ponownie połączyć długie wyniki w jeden, prawidłowy ciąg JSON, łącząc zawartość wielu wierszy. Aby zapoznać się z przykładem tego kodu w aplikacji języka C#, zobacz Use FOR JSON output in a C# client app(Używanie danych wyjściowych FOR JSON w aplikacji klienckiej języka C#).

        Zrzut ekranu danych wyjściowych FOR JSON w SQL Server Management Studio.

  2. Wyniki są formatowane jako tablica obiektów JSON.

    • Liczba elementów w tablicy JSON jest równa liczbie wierszy w wynikach instrukcji SELECT (przed zastosowaniem klauzuli JSON FOR).

    • Każdy wiersz w wynikach instrukcji SELECT (przed zastosowaniem klauzuli JSON FOR) staje się oddzielnym obiektem JSON w tablicy.

    • Każda kolumna w wynikach instrukcji SELECT (przed zastosowaniem klauzuli JSON FOR) staje się właściwością obiektu JSON.

  3. Zarówno nazwy kolumn, jak i ich wartości są odpowiednio kodowane zgodnie ze składnią JSON. Aby uzyskać więcej informacji, zobacz Jak FOR JSON ucieka znaki specjalne i kontrolne (SQL Server).

Przykład

Oto przykład, który pokazuje, jak klauzula FOR JSON formatuje dane wyjściowe JSON.

Wyniki zapytania

A B C D
10 11 12 X
20 21 22 Y
30 31 32 Z

Dane wyjściowe JSON

[{
    "A": 10,
    "B": 11,
    "C": 12,
    "D": "X"
}, {
    "A": 20,
    "B": 21,
    "C": 22,
    "D": "Y"
}, {
    "A": 30,
    "B": 31,
    "C": 32,
    "D": "Z"
}]