Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik: Az SQL Server 2016 (13.x) és újabb verziói
Az Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL Analytics végpontja a Microsoft Fabric
Warehouse-ban a Microsoft Fabric
SQL Database-ben a Microsoft Fabricben
A JSON_QUERY szintaxis egy objektumot vagy tömböt nyer ki egy JSON-sztringből.
Ha objektum vagy tömb helyett JSON-sztringből szeretne skaláris értéket kinyerni, tekintse meg a JSON_VALUE. A különbségekről JSON_VALUEJSON_QUERYa JSON_VALUE és a JSON_QUERY összehasonlítása című témakörben olvashat.
Transact-SQL szintaxis konvenciói
Syntax
JSON_QUERY ( expression [ , path ] [ WITH ARRAY WRAPPER ] )
Arguments
expression
Egy kifejezés. Általában egy JSON-szöveget tartalmazó változó vagy oszlop neve.
Ha JSON_QUERY a kifejezésben érvénytelen JSON-t talál, mielőtt megkeresi az elérési út által azonosított értéket, a függvény hibát ad vissza. Ha JSON_QUERY nem találja az elérési út által azonosított értéket, a teljes szöveget megvizsgálja, és hibát ad vissza, ha olyan JSON-t talál, amely a kifejezésben sehol nem érvényes.
path
Egy JSON-elérési út, amely meghatározza a kinyerni kívánt objektumot vagy tömböt.
Az SQL Server 2017-ben (14.x) és az Azure SQL Database-ben megadhat egy változót az elérési út értékeként.
A JSON-elérési út megadhatja a hasadékot vagy a szigorú elemzési módot. Ha nem adja meg az elemzési módot, a lax mód az alapértelmezett. További információ: JSON Path Expressions in the SQL Database Engine.
Az elérési út alapértelmezett értéke.$ Ennek eredményeképpen, ha nem ad meg értéket az elérési úthoz, JSON_QUERY a bemeneti kifejezést adja vissza.
Ha az elérési út formátuma érvénytelen, JSON_QUERY hibát ad vissza.
TÖMBBURKOLÓVAL
Note
WITH ARRAY WRAPPER jelenleg előzetes verzióban van, és csak SQL Server 2025 (17.x) verzióban érhető el.
Az ANSI SQL-függvény JSON_QUERY jelenleg egy JSON-objektum vagy tömb visszaadására szolgál egy megadott elérési úton. Az SQL/JSON útkifejeződésben megjelent tömb-vadkártyák támogatásával, amelyet az SQL Server 2025 (17.x) vezetett be, JSON_QUERY használható a JSON tömbben található elemek meghatározott tulajdonságainak visszaadására, ahol minden elem JSON objektum. Mivel a helyettesítő karakterek keresése több értéket is visszaadhat, adja meg a WITH ARRAY WRAPPER JSON-lekérdezési kifejezés záradékát, valamint egy SQL/JSON-elérési útkifejezést helyettesítő karakterrel vagy tartománnyal vagy listával, hogy JSON-tömbként adja vissza az értékeket.
WITH ARRAY WRAPPER záradék csak akkor támogatott, ha a bemenet json típusú.
Vegye figyelembe a következő JSON-dokumentumot:
DECLARE @j AS JSON = '{
"id": 2,
"first_name": "Mamie",
"last_name": "Baudassi",
"email": "mbaudassi1@example.com",
"gender": "Female",
"ip_address": "148.199.129.123",
"credit_cards": [
{
"type": "jcb",
"card#": "3545138777072343",
"currency": "Koruna"
},
{
"type": "diners-club-carte-blanche",
"card#": "30282304348533",
"currency": "Dong"
},
{
"type": "jcb",
"card#": "3585303288595361",
"currency": "Yuan Renminbi"
},
{
"type": "maestro",
"card#": "675984450768756054",
"currency": "Rupiah"
},
{
"type": "instapayment",
"card#": "6397068371771473",
"currency": "Euro"
}
]
}';
Az elérési út $.credit_cards egy JSON-tömbre mutat, ahol minden elem érvényes JSON-objektum. Most a JSON_QUERY függvény tömb helyettesítő karakterek támogatásával is használható a type tulajdonság összes vagy meghatározott értékének visszaadására, például:
SELECT JSON_QUERY(@j, '$.credit_cards[*].type' WITH ARRAY WRAPPER);
Az alábbi táblázat különböző példákat mutat be az SQL/JSON elérési út kifejezésére helyettesítő karakterrel és a visszatérési érték használatával JSON_QUERY WITH ARRAY WRAPPER.
| Path | Visszaadott érték |
|---|---|
$.credit_cards[0].type |
["jcb"] |
$.credit_cards[*].type |
["jcb","diners-club-carte-blanche","jcb","maestro","instapayment"] |
$.credit_cards[0, 2].type |
["jcb","jcb"] |
$.credit_cards[1 to 3].type |
["diners-club-carte-blanche","jcb","maestro"] |
$.credit_cards[last].type |
["instapayment"] |
$.credit_cards[last, 0].type |
["instapayment","jcb"] |
$.credit_cards[last, last].type |
["instapayment","instapayment"] |
$.credit_cards[ 0, 2, 4].type |
["jcb","jcb","instapayment"] |
Visszaadott érték
Egy Nvarchar(max) típusú JSON-töredéket ad vissza. A visszaadott érték rendezése megegyezik a bemeneti kifejezés rendezésével.
Ha az érték nem objektum vagy tömb:
Lax módban a
JSON_QUERYnull értéket ad vissza.Szigorú módban
JSON_QUERYhibát ad vissza.
Remarks
Hasadt mód és szigorú mód
Vegye figyelembe a következő JSON-szöveget:
{
"info": {
"type": 1,
"address": {
"town": "Cheltenham",
"county": "Gloucestershire",
"country": "England"
},
"tags": ["Sport", "Water polo"]
},
"type": "Basic"
}
Az alábbi táblázat a JSON_QUERY viselkedését hasonlítja össze laza módban és szigorú módban. Az opcionális elérésiút-mód specifikációjáról (lax vagy szigorú) további információt az SQL Database Engine JSON-elérésiút-kifejezéseiben talál.
| Path | Visszatérési érték hasadó módban | Érték visszaadott értéke szigorú módban | További információk |
|---|---|---|---|
$ |
A teljes JSON-szöveget adja vissza. | A teljes JSON-szöveget adja vissza. | |
$.info.type |
NULL |
Error | Nem objektum vagy tömb. Használjon inkább JSON_VALUE. |
$.info.address.town |
NULL |
Error | Nem objektum vagy tömb. Használjon inkább JSON_VALUE. |
$.info."address" |
N'{ "town":"Cheltenham", "county":"Gloucestershire", "country":"England" }' |
N'{ "town":"Cheltenham", "county":"Gloucestershire", "country":"England" }' |
|
$.info.tags |
N'[ "Sport", "Water polo"]' |
N'[ "Sport", "Water polo"]' |
|
$.info.type[0] |
NULL |
Error | Nem tömb. |
$.info.none |
NULL |
Error | A tulajdonság nem létezik. |
A JSON_QUERY használata a FOR JSON-nal
JSON_QUERY érvényes JSON-töredéket ad vissza. Ennek eredményeképpen FOR JSON nem menekül a JSON_QUERY visszatérési érték speciális karakterei elől.
Ha a FOR JSON használatával ad vissza eredményeket, és olyan adatokat is tartalmaz, amelyek már JSON formátumban vannak (oszlopban vagy kifejezés eredményeként), csomagolja be a JSON-adatokat JSON_QUERY az elérési út paramétere nélkül.
Examples
A. JSON-töredék visszaadása
Az alábbi példa bemutatja, hogyan lehet JSON-töredékeket visszaadni egy CustomFields oszlopból a lekérdezési eredményekben.
SELECT PersonID,
FullName,
JSON_QUERY(CustomFields, '$.OtherLanguages') AS Languages
FROM Application.People;
B. JSON-töredékek belefoglalása a JSON-kimenetbe
Az alábbi példa bemutatja, hogyan lehet JSON-töredékeket belefoglalni a FOR JSON záradék kimenetében.
SELECT StockItemID,
StockItemName,
JSON_QUERY(Tags) AS Tags,
JSON_QUERY(CONCAT('["', ValidFrom, '","', ValidTo, '"]')) AS ValidityPeriod
FROM Warehouse.StockItems
FOR JSON PATH;
C. A TÖMBBURKOLÓ használata JSON_QUERY függvénnyel
Az alábbi példa azt mutatja be, WITH ARRAY WRAPPER hogy a JSON_QUERY függvény használatával több elemet ad vissza egy JSON-tömbből:
DECLARE @j JSON = '
{"id":2, "first_name":"Mamie", "last_name":"Baudassi", "email":"mbaudassi1@example.com", "gender":"Female", "ip_address":"148.199.129.123", "credit_cards":[ {"type":"jcb", "card#":"3545138777072343", "currency":"Koruna"}, {"type":"diners-club-carte-blanche", "card#":"30282304348533", "currency":"Dong"}, {"type":"jcb", "card#":"3585303288595361", "currency":"Yuan Renminbi"}, {"type":"maestro", "card#":"675984450768756054", "currency":"Rupiah"}, {"type":"instapayment", "card#":"6397068371771473", "currency":"Euro"}]}
';
SELECT JSON_QUERY(@j, '$.credit_cards[*].type' WITH ARRAY WRAPPER ) as credit_card_types;
Itt van az eredmények összessége.
credit_card_types
--------
["jcb","diners-club-carte-blanche","jcb","maestro","instapayment"]