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
JSON_VALUE Syntaxe extrahuje skalární hodnotu z řetězce JSON.
Pokud chcete extrahovat objekt nebo pole z řetězce JSON místo skalární hodnoty, přečtěte si JSON_QUERY. Informace o JSON_VALUE rozdílch JSON_QUERY
Syntax
JSON_VALUE ( expression , path [ RETURNING data_type ] )
Arguments
expression
Výraz. Obvykle název proměnné nebo sloupce, který obsahuje text JSON.
Pokud JSON_VALUE najde JSON, který není ve výrazu platný, než najde hodnotu identifikovanou cestou, vrátí funkce chybu. Pokud JSON_VALUE 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 vlastnost, která se má extrahovat. Další informace najdete v tématu Výrazy cesty JSON v databázovém stroji SQL.
V SQL Serveru 2017 (14.x) a ve službě Azure SQL Database můžete jako hodnotu cesty zadat proměnnou.
Pokud formát cesty není platný, JSON_VALUE vrátí chybu.
data_type
Vrátí hodnotu zadanou v typu SQL. Podporuje se pouze v případě, že je vstup typem JSON. Podporované typy SQL jsou: tinyint, smallint, int, bigint, decimal, numeric, float, real, char, varchar, varchar(max), nchar, nvarchar(max), nvarchar(max), date, time, datetime2 a datetimeoffset.
Návratová hodnota
Pokud RETURNING není zahrnuto:
Vrátí jednu textovou hodnotu typu nvarchar(4000). Kolace vrácené hodnoty je stejná jako kolace vstupního výrazu.
Pokud je hodnota větší než 4000 znaků:
- V laxní režimu,
JSON_VALUEvrátí .NULL - V přísném režimu
JSON_VALUEvrátí chybu.
Pokud potřebujete vrátit skalární hodnoty větší než 4000 znaků, použijte
OPENJSONmístoJSON_VALUE. Další informace najdete v tématu OPENJSON.- V laxní režimu,
Pokud RETURNING je součástí:
Vrátí hodnotu zadanou v typu SQL. Podporované typy SQL jsou: tinyint, smallint, int, bigint, decimal, numeric, float, real, char, varchar, varchar(max), nchar, nvarchar(max), nvarchar(max), date, time, datetime2 a datetimeoffset.
Funkce JSON fungují stejně, jako když je dokument JSON uložený v souboru varchar, nvarchar nebo nativním datovém typu JSON .
Remarks
Laxní režim a striktní režim
Představte si následující text JSON:
DECLARE @jsonInfo AS NVARCHAR (MAX);
SET @jsonInfo = N'{
"info":{
"type":1,
"address":{
"town":"Bristol",
"county":"Avon",
"country/region":"England"
},
"tags":["Sport", "Water polo"]
},
"type":"Basic"
}';
Následující tabulka porovnává chování JSON_VALUE 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 |
|---|---|---|---|
| $ | NULL |
Error | Nejedná se o skalární hodnotu. Místo toho použijte JSON_QUERY. |
| $.info.type | N'1' | N'1' | N/a |
| $.info.address.town | N'Bristol' | N'Bristol' | N/a |
| $.info." adresa" | NULL |
Error | Nejedná se o skalární hodnotu. Místo toho použijte JSON_QUERY. |
| $.info.tags | NULL |
Error | Nejedná se o skalární hodnotu. Místo toho použijte JSON_QUERY. |
| $.info.type[0] | NULL |
Error | Ne pole. |
| $.info.none | NULL |
Error | Vlastnost neexistuje. |
Examples
Příklad 1
Následující příklad používá hodnoty vlastností town JSON a state ve výsledcích dotazu. Vzhledem k tomu JSON_VALUE , že zachovává kolaci zdroje, pořadí řazení výsledků závisí na kolaci jsonInfo sloupce.
Note
(Tento příklad předpokládá, že tabulka s názvem Person.Person obsahuje jsonInfo sloupec textu JSON a že tento sloupec má strukturu zobrazenou dříve v diskuzi o laxním režimu a striktním režimu. AdventureWorks V ukázkové databázi Person tabulka ve skutečnosti neobsahuje jsonInfo sloupec.)
SELECT FirstName,
LastName,
JSON_VALUE(jsonInfo, '$.info.address.town') AS Town
FROM Person.Person
WHERE JSON_VALUE(jsonInfo, '$.info.address.state') LIKE 'US%'
ORDER BY JSON_VALUE(jsonInfo, '$.info.address.town');
Příklad 2
Následující příklad extrahuje hodnotu vlastnosti town JSON do místní proměnné.
DECLARE @jsonInfo AS NVARCHAR (MAX);
DECLARE @town AS NVARCHAR (32);
SET @jsonInfo = N'{"info":{"address":[{"town":"Paris"},{"town":"London"}]}}';
SET @town = JSON_VALUE(@jsonInfo, '$.info.address[0].town'); -- Paris
SET @town = JSON_VALUE(@jsonInfo, '$.info.address[1].town'); -- London
Příklad 3
Následující příklad vytvoří počítané sloupce na základě hodnot vlastností JSON.
CREATE TABLE dbo.Store
(
StoreID INT IDENTITY (1, 1) NOT NULL,
Address VARCHAR (500),
jsonContent NVARCHAR (4000),
Longitude AS JSON_VALUE(jsonContent, '$.address[0].longitude'),
Latitude AS JSON_VALUE(jsonContent, '$.address[0].latitude')
);
Příklad 4
Následující příklad extrahuje hodnotu z pole JSON pomocí JSON_VALUE a vrátí hodnotu jako hodnotu typu data.
DECLARE @j AS JSON = '[1, 1.3333, true, "a", "1", "2025-01-01"]';
SELECT JSON_VALUE(@j, '$[5]' RETURNING date) AS date_value;
date_value
--------
2025-01-01