Sdílet prostřednictvím


Formátujte výsledky dotazu jako JSON pomocí FOR JSON

platí pro:SQL Serverazure SQL Managed InstanceAzure Synapse Analytics (jenom bezserverový fond SQL)koncový bod analýzy SQL v Microsoft FabricWarehouse v Microsoft Fabric

Naformátujte výsledky dotazu jako JSON nebo exportujte data z SQL Serveru jako JSON přidáním klauzule FOR JSON do příkazu SELECT. Pomocí klauzule FOR JSON zjednodušte klientské aplikace delegováním formátování výstupu JSON z aplikace na SQL Server.

Poznámka

Azure Data Studio je doporučeným editorem dotazů pro dotazy JSON, protože automaticky formátuje výsledky JSON, jak je znázorněno v tomto článku. SQL Server Management Studio zobrazí neformátovaný řetězec.

V datovém skladu fabric musí být FOR JSON posledním operátorem v dotazu, takže v poddotazech není povolený.

Formátování výsledků dotazu

Při použití klauzule FOR JSON můžete explicitně zadat strukturu výstupu JSON nebo nechat strukturu příkazu SELECT určit výstup.

  • Pokud chcete zachovat úplnou kontrolu nad formátem výstupu JSON, použijte FOR JSON PATH. Můžete vytvořit objekty obálky a vnořit složité vlastnosti.

  • Pokud chcete formátovat výstup JSON automaticky na základě struktury příkazu SELECT, použijte FOR JSON AUTO.

Tady je příklad příkazu SELECT s klauzulí FOR JSON a jejím výstupem.

diagram znázorňující, jak FUNGUJE FORMÁT JSON

Řízení výstupu pomocí příkazu FOR JSON PATH

V PATH režimu můžete k formátování vnořeného výstupu použít tečkovanou syntaxi , například Item.Price.

Tady je ukázkový dotaz, který používá režim PATH s klauzulí FOR JSON. Následující příklad také používá možnost ROOT k zadání pojmenovaného kořenového elementu.

diagram toku výstupu FOR JSON

Další informace o příkazu FOR JSON PATH

Podrobnější informace a příklady najdete v tématu Formát vnořeného výstupu JSON s režimem PATH.

Syntaxi a použití najdete v tématu SELECT – klauzule FOR (Transact-SQL).

Řízení dalších možností výstupu JSON

Pomocí následujících dodatečných možností můžete řídit výstup klauzule FOR JSON.

  • ROOT

    Pokud chcete do výstupu JSON přidat jeden element nejvyšší úrovně, zadejte možnost ROOT. Pokud tuto možnost nezadáte, výstup JSON nemá kořenový prvek. Další informace najdete v tématu Přidání kořenového uzlu do výstupu JSON sROOT Option (SQL Server).

  • INCLUDE_NULL_VALUES

    Pokud chcete do výstupu JSON zahrnout hodnoty null, zadejte možnost INCLUDE_NULL_VALUES. Pokud tuto možnost nezadáte, výstup neobsahuje vlastnosti JSON pro NULL hodnoty ve výsledcích dotazu. Další informace naleznete v tématu Zahrnutí hodnot Null v JSON – volba INCLUDE_NULL_VALUES.

  • WITHOUT_ARRAY_WRAPPER

    Pokud chcete ve výchozím nastavení odebrat hranaté závorky, které obklopují výstup JSON klauzule FOR JSON, zadejte možnost WITHOUT_ARRAY_WRAPPER. Tato možnost slouží k vygenerování jednoho objektu JSON jako výstupu z výsledku s jedním řádkem. Pokud tuto možnost nezadáte, výstup JSON se naformátuje jako pole – to znamená, že výstup je uzavřený v hranatých závorkách. Další informace naleznete v Odebrání hranatých závorek z JSON – možnost WITHOUT_ARRAY_WRAPPER.

Výstup klauzule FOR JSON

Výstup klauzule FOR JSON má následující charakteristiky:

  1. Sada výsledků obsahuje jeden sloupec.

    • Malá sada výsledků může obsahovat jeden řádek.
    • Velká sada výsledků rozdělí dlouhý řetězec JSON napříč více řádky.
      • Sql Server Management Studio (SSMS) ve výchozím nastavení zřetězí výsledky do jednoho řádku, když je nastavení výstupu Výsledky do mřížky. Stavový řádek SSMS zobrazuje skutečný počet řádků.

      • Jiné klientské aplikace mohou vyžadovat, aby kód rekombinoval dlouhé výsledky do jednoho platného řetězce JSON zřetězením obsahu více řádků. Příklad tohoto kódu v aplikaci jazyka C# najdete v tématu Použití výstupu FOR JSON v klientské aplikaci jazyka C#.

        Snímek obrazovky s výstupem FOR JSON v sadě SQL Server Management Studio

  2. Výsledky jsou formátovány jako pole objektů JSON.

    • Počet prvků v poli JSON se rovná počtu řádků ve výsledcích příkazu SELECT (před použití klauzule FOR JSON).

    • Každý řádek ve výsledcích příkazu SELECT (před použitím klauzule FOR JSON) se stane samostatným objektem JSON v poli.

    • Každý sloupec ve výsledcích příkazu SELECT (před použití klauzule FOR JSON) se stane vlastností objektu JSON.

  3. Názvy sloupců i jejich hodnoty se eskapují podle syntaxe JSON. Další informace najdete v tématu Jak FOR JSON nahrazuje speciální znaky a řídicí znaky (SQL Server).

Příklad

Tady je příklad, který ukazuje, jak klauzule FOR JSON formátuje výstup JSON.

Výsledky dotazu

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

Výstup 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"
}]