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

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

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.

Note

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.

Ve službě Fabric Data Warehouse FOR JSON musí být posledním operátorem v dotazu, takže ho nemůžete použít v poddotazech.

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 použijte syntaxi tečky (například Item.Price) k formátování vnořeného výstupu.

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átování vnořeného výstupu JSON s režimem PATH.

Syntaxe a použití najdete v tématu SELECT – KLAUZULE FOR.

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

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

  • 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 s možností ROOT.

  • 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 odpovídá 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 naleznete v tématu Jak FOR JSON nahrazuje speciální znaky a řídicí znaky.

Example

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