Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Platí pro: SQL Server 2016 (13.x) a novější verze
koncového bodu Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
v Microsoft Fabric
Warehouse v databázi Microsoft Fabric
SQL v Microsoft Fabric
Syntaxe JSON_QUERY extrahuje objekt nebo pole z řetězce JSON.
Pokud chcete extrahovat skalární hodnotu z řetězce JSON místo objektu nebo pole, přečtěte si JSON_VALUE. Informace o JSON_VALUE rozdílch JSON_QUERY
Syntax
JSON_QUERY ( expression [ , path ] [ WITH ARRAY WRAPPER ] )
Arguments
expression
Výraz. Obvykle název proměnné nebo sloupce, který obsahuje text JSON.
Pokud JSON_QUERY najde JSON, který není ve výrazu platný, než najde hodnotu identifikovanou cestou, vrátí funkce chybu. Pokud JSON_QUERY nenajde hodnotu identifikovanou cestou, prohledá celý text a vrátí chybu, pokud najde JSON, který není platný kdekoli ve výrazu.
path
Cesta JSON, která určuje objekt nebo pole, které se má extrahovat.
V SQL Serveru 2017 (14.x) a ve službě Azure SQL Database můžete jako hodnotu cesty zadat proměnnou.
Cesta JSON může určit laxní nebo striktní režim pro analýzu. Pokud nezadáte režim analýzy, je výchozí laxní režim. Další informace najdete v tématu Výrazy cesty JSON v databázovém stroji SQL.
Výchozí hodnota pro cestu je $. V důsledku toho, pokud nezadáte hodnotu pro cestu, JSON_QUERY vrátí vstupní výraz.
Pokud formát cesty není platný, JSON_QUERY vrátí chybu.
S OBÁLKOU POLE
Funkce ANSI SQL JSON_QUERY vrací objekt nebo pole JSON na určené cestě. Díky podpoře wildcardu pole v SQL/JSON cestových výrazech JSON_QUERY lze vracet specifikované vlastnosti prvků v JSON poli, kde každý prvek je JSON objektem. Protože vyhledávání pomocí žolíkových karet může vracet více hodnot, určete klauzuli WITH ARRAY WRAPPER pomocí SQL/JSON path expression, která obsahuje žolík, rozsah nebo seznam, aby se hodnoty vrátily jako JSON pole. Klauzule WITH ARRAY WRAPPER je podporována pouze tehdy, pokud je vstup typu json .
Podívejte se na následující dokument JSON:
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"
}
]
}';
Cesta $.credit_cards odkazuje na pole JSON, kde každý prvek je platným objektem JSON.
JSON_QUERY Nyní lze funkci použít s podporou zástupných type znaků pole k vrácení všech nebo konkrétních hodnot vlastnosti, například:
SELECT JSON_QUERY(@j, '$.credit_cards[*].type' WITH ARRAY WRAPPER);
Následující tabulka uvádí různé příklady výrazu cesty SQL/JSON se zástupným znakem a návratovou hodnotou pomocí JSON_QUERY WITH ARRAY WRAPPER.
| Path | Návratová hodnota |
|---|---|
$.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"] |
Návratová hodnota
Vrátí fragment JSON typu
Pokud hodnota není objekt nebo pole:
V laxném režimu
JSON_QUERYvrátí hodnotu null.V přísném režimu
JSON_QUERYvrátí chybu.
Remarks
Laxní režim a striktní režim
Představte si následující text JSON:
{
"info": {
"type": 1,
"address": {
"town": "Cheltenham",
"county": "Gloucestershire",
"country": "England"
},
"tags": ["Sport", "Water polo"]
},
"type": "Basic"
}
Následující tabulka porovnává chování JSON_QUERY v laxním režimu a v přísném režimu. Další informace o volitelné specifikaci režimu cesty (lax nebo striktní) najdete v tématu Výrazy cesty JSON v databázovém stroji SQL.
| Path | Návratová hodnota v laxní režimu | Návratová hodnota v přísném režimu | Další informace |
|---|---|---|---|
$ |
Vrátí celý text JSON. | Vrátí celý text JSON. | |
$.info.type |
NULL |
Error | Nejedná se o objekt nebo pole. Místo toho použijte JSON_VALUE. |
$.info.address.town |
NULL |
Error | Nejedná se o objekt nebo pole. Místo toho použijte 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 | Ne pole. |
$.info.none |
NULL |
Error | Vlastnost neexistuje. |
Použití JSON_QUERY s FOR JSON
JSON_QUERY vrátí platný fragment JSON. V důsledku toho FOR JSON neunikne speciálním znakům v JSON_QUERY návratové hodnotě.
Pokud vracíte výsledky ve formátu FOR JSON a zahrnete data, která jsou už ve formátu JSON (ve sloupci nebo ve výsledku výrazu), zabalte data JSON_QUERY JSON bez parametru cesty .
Examples
A. Vrácení fragmentu JSON
Následující příklad ukazuje, jak vrátit fragment JSON z CustomFields sloupce ve výsledcích dotazu.
SELECT PersonID,
FullName,
JSON_QUERY(CustomFields, '$.OtherLanguages') AS Languages
FROM Application.People;
B. Zahrnutí fragmentů JSON do výstupu FOR JSON
Následující příklad ukazuje, jak do výstupu klauzule FOR JSON zahrnout fragmenty JSON.
SELECT StockItemID,
StockItemName,
JSON_QUERY(Tags) AS Tags,
JSON_QUERY(CONCAT('["', ValidFrom, '","', ValidTo, '"]')) AS ValidityPeriod
FROM Warehouse.StockItems
FOR JSON PATH;
C. Použití FUNKCE WITH ARRAY WRAPPER s funkcí JSON_QUERY
Následující příklad ukazuje použití WITH ARRAY WRAPPER funkce JSON_QUERY k vrácení více prvků z pole JSON:
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;
Tady je soubor výsledků.
credit_card_types
--------
["jcb","diners-club-carte-blanche","jcb","maestro","instapayment"]