Dela via


Formatera frågeresultat som JSON med FOR JSON

gäller för:SQL ServerAzure SQL Managed InstanceAzure Synapse Analytics (endast serverlös SQL-pool)SQL-analysslutpunkt i Microsoft FabricWarehouse i Microsoft Fabric

Formatera frågeresultat som JSON eller exportera data från SQL Server som JSON genom att lägga till FOR JSON-satsen i en SELECT-instruktion. Använd FOR JSON-satsen för att förenkla klientprogram genom att delegera formateringen av JSON-utdata från appen till SQL Server.

Anteckning

Azure Data Studio är den rekommenderade frågeredigeraren för JSON-frågor eftersom det automatiskt formaterar JSON-resultaten enligt den här artikeln. SQL Server Management Studio visar en oformaterad sträng.

I Fabric Data Warehouse måste FOR JSON vara den sista operatorn i frågan och tillåts därför inte i underfrågor.

Formatera frågeresultat

När du använder FOR JSON-satsen kan du uttryckligen ange strukturen för JSON-utdata eller låta strukturen för SELECT-instruktionen fastställa utdata.

  • Om du vill behålla fullständig kontroll över JSON-utdataformatet använder du FOR JSON PATH. Du kan skapa omslutningsobjekt och inbädda komplexa egenskaper.

  • Om du vill formatera JSON-utdata automatiskt baserat på strukturen för SELECT-instruktionen använder du FOR JSON AUTO.

Här är ett exempel på en SELECT-instruktion med FOR JSON-satsen och dess resultat.

diagram som visar hur FOR JSON fungerar.

Kontrollera utdata med FOR JSON PATH

I PATH läge kan du använda punktsyntaxen – till exempel Item.Price – för att formatera kapslade utdata.

Här är en exempelfråga som använder PATH-läget med FOR JSON-satsen. I följande exempel används också alternativet ROOT för att ange ett namngivet rotelement.

diagram över flödet för FOR JSON-utdata.

Mer information om FOR JSON PATH

Mer detaljerad information och exempel finns i Formatera kapslade JSON-utdata med PATH-läge.

Syntax och användning finns i SELECT – FOR Clause (Transact-SQL).

Kontrollera andra JSON-utdataalternativ

Kontrollera utdata för FOR JSON-satsen med hjälp av följande extra alternativ.

  • ROOT

    Om du vill lägga till ett enda element på den översta nivån i JSON-utdata anger du alternativet ROOT. Om du inte anger det här alternativet har JSON-utdata inte något rotelement. Mer information finns i Lägg till en rotnod i JSON-utdata med ROOT-alternativet (SQL Server).

  • INCLUDE_NULL_VALUES

    Om du vill inkludera null-värden i JSON-utdata anger du alternativet INCLUDE_NULL_VALUES. Om du inte anger det här alternativet innehåller inte utdata JSON-egenskaper för NULL värden i frågeresultatet. Mer information finns i Include Null Values in JSON – INCLUDE_NULL_VALUES Option.

  • WITHOUT_ARRAY_WRAPPER

    Om du vill ta bort hakparenteserna som omger JSON-utdata för FOR JSON-satsen som standard anger du alternativet WITHOUT_ARRAY_WRAPPER. Använd det här alternativet om du vill generera ett enda JSON-objekt som utdata från ett resultat på en rad. Om du inte anger det här alternativet formateras JSON-utdata som en matris, dvs. utdata omges av hakparenteser. För mer information, se Ta bort hakparenteser från JSON – inställningen WITHOUT_ARRAY_WRAPPER.

Utdata från FOR JSON-satsen

Utdata från FOR JSON-satsen har följande egenskaper:

  1. Resultatuppsättningen innehåller en enda kolumn.

    • En liten resultatuppsättning kan innehålla en enda rad.
    • En stor resultatuppsättning delar upp den långa JSON-strängen över flera rader.
      • Som standard sammanfogar SQL Server Management Studio (SSMS) resultatet till en enda rad när utdatainställningen är Results to Grid. SSMS-statusfältet visar det faktiska radantalet.

      • Andra klientprogram kan kräva kod för att kombinera långa resultat till en enda giltig JSON-sträng genom att sammanfoga innehållet i flera rader. Ett exempel på den här koden i ett C#-program finns i Använda FÖR JSON-utdata i en C#-klientapp.

        Skärmbild av FÖR JSON-utdata från SQL Server Management Studio.

  2. Resultatet formateras som en matris med JSON-objekt.

    • Antalet element i JSON-matrisen är lika med antalet rader i resultatet av SELECT-instruktionen (innan FOR JSON-satsen tillämpas).

    • Varje rad i resultatet av SELECT-instruktionen (innan FOR JSON-satsen tillämpas) blir ett separat JSON-objekt i matrisen.

    • Varje kolumn i resultatet av SELECT-instruktionen (innan FOR JSON-satsen tillämpas) blir en egenskap för JSON-objektet.

  3. Både namnen på kolumnerna och deras värden är undantagna enligt JSON-syntaxen. Mer information finns i Hur FOR JSON hanterar specialtecken och styrtecken (SQL Server).

Exempel

Här är ett exempel som visar hur FOR JSON-satsen formaterar JSON-utdata.

Frågeresultat

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

JSON-utdata

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