Megosztás a következőn keresztül:


JSON-adatok elemzése és átalakítása OPENJSON használatával

Vonatkozik a következőkre: SQL Server 2016 (13.x) és későbbi verziók Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analytics (csak szerver nélküli SQL pool)SQL analytics endpoint a Microsoft FabricbanTárház a Microsoft FabricbanAdatbázis a Microsoft Fabricban

A OPENJSON sorhalmaz függvény a JSON-szöveget sor- és oszlopkészletté alakítja. Miután egy JSON-gyűjteményt OPENJSONtartalmazó sorhalmazsá alakított át, bármilyen SQL-lekérdezést futtathat a visszaadott adatokon, vagy beszúrhatja egy SQL Server-táblába. További információ a JSON-adatok SQL Server-adatbázismotorban való kezeléséről: JSON-adatok az SQL Server.

A OPENJSON függvény egyetlen JSON-objektumot vagy JSON-objektumgyűjteményt vesz igénybe, és átalakítja őket egy vagy több sorba. Alapértelmezés szerint a OPENJSON függvény a következő adatokat adja vissza:

  • Egy JSON-objektumból a függvény visszaadja az első szinten talált kulcs-érték párokat.
  • Egy JSON-tömbből a függvény a tömb összes elemét visszaadja az indexekkel együtt.

Hozzáadhat egy választható WITH záradékot, hogy olyan sémát biztosítson, amely explicit módon meghatározza a kimenet szerkezetét.

OPENJSON az alapértelmezett kimenettel

Ha a OPENJSON függvényt anélkül használja, hogy explicit sémát ad meg az eredményekhez – azaz WITH utáni OPENJSON záradék nélkül –, a függvény a következő három oszlopból álló táblát ad vissza:

  1. A tulajdonság name a bemeneti objektumban (vagy a bemeneti tömb elemének indexe).
  2. A(z) value tulajdonság vagy tömbelem.
  3. A type (például szöveg, szám, logikai érték, tömb vagy objektum).

OPENJSON a JSON-objektum minden tulajdonságát, vagy a tömb minden elemét külön sorként adja vissza.

Az alábbi példa OPENJSON használ az alapértelmezett sémával – vagyis az opcionális WITH záradék nélkül –, és egy sort ad vissza a JSON-objektum minden tulajdonságához.

DECLARE @json NVARCHAR(MAX);

SET @json='{ "name": "John", "surname": "Doe", "age": 45, "skills": [ "SQL", "C#", "MVC" ]}';

SELECT *
FROM OPENJSON(@json);

Itt van az eredményhalmaz.

kulcs value típus
name John 1
surname Doe 1
age 45 2
skills [ "SQL" ,"C#" ,"MVC" ] 4

További információkért és példákért lásd: Az OPENJSON használata az alapértelmezett sémával.

Szintaxis és használat: OPENJSON.

OPENJSON-kimenet explicit struktúrával

Ha az eredmények sémáját a WITH függvény OPENJSON záradékával adja meg, a függvény egy táblát ad vissza, amely csak a WITH záradékban megadott oszlopokat tartalmazza. Az opcionális WITH záradékban meg kell adnia a kimeneti oszlopok, azok típusai és a JSON-forrástulajdonságok elérési útjait az egyes kimeneti értékekhez. OPENJSON végigfut a JSON-objektumok tömbjén, beolvassa az egyes oszlopok megadott elérési útjának értékét, és átalakítja az értéket a megadott típusra.

Az alábbi példa a OPENJSON-t használja a WITH záradékban explicit módon megadott kimenethez tartozó sémával.

DECLARE @json NVARCHAR(MAX);

SET @json = N'[
    {
        "Order": {
            "Number": "SO43659",
            "Date": "2024-05-31T00:00:00"
        },
        "AccountNumber": "AW29825",
        "Item": {
            "Price": 2024.9940,
            "Quantity": 1
        }
    },
    {
        "Order": {
            "Number": "SO43661",
            "Date": "2024-06-01T00:00:00"
        },
        "AccountNumber": "AW73565",
        "Item": {
            "Price": 2024.9940,
            "Quantity": 3
        }
    }
]';

SELECT *
FROM OPENJSON(@json) WITH (
    Number VARCHAR(200) '$.Order.Number',
    DATE DATETIME '$.Order.Date',
    Customer VARCHAR(200) '$.AccountNumber',
    Quantity INT '$.Item.Quantity'
);

Itt van az eredményhalmaz.

Number Date Customer Quantity
SO43659 2024-05-31T00:00:00 AW29825 1
SO43661 2024-06-01T00:00:00 AW73565 3

Ez a függvény egy JSON-tömb elemeit adja vissza és formázja.

  • A JSON-tömb minden eleméhez OPENJSON létrehoz egy új sort a kimeneti táblában. A JSON-tömb két eleme a visszaadott tábla két sorává lesz konvertálva.

  • A colName type json_path szintaxissal megadott minden egyes oszlop esetében OPENJSON a megadott elérési út egyes tömbelemeiben található értéket a megadott típusra konvertálja. Ebben a példában a Date oszlop értékei a $.Order.Date elérési út minden eleméből származnak, és dátum/idő értékekké alakulnak.

További információkért és példákért lásd: OpenJSON használata explicit sémával.

Szintaxis és használat: OPENJSON.

Az OPENJSON 130-es kompatibilitási szintet igényel

A OPENJSON függvény csak kompatibilitási szintű 130 és nagyobb szinten érhető el. Ha a adatbázis kompatibilitási szintje alacsonyabb, mint 130, az SQL Server nem találja és nem futtatja a OPENJSON függvényt. A többi beépített JSON-függvény minden kompatibilitási szinten elérhető.

A kompatibilitási szintet sys.databases nézetben vagy az adatbázis tulajdonságaiban ellenőrizheti, és az alábbi paranccsal módosíthatja az adatbázis kompatibilitási szintjét:

ALTER DATABASE <DatabaseName> SET COMPATIBILITY_LEVEL = 130;