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 Pomocí syntaxe extrahujte 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
Syntaxe pro SQL Server 2022 (16.x) a starší verze
JSON_VALUE ( expression , path )
Syntaxe pro SQL Server 2025 (17.x) a novější verze
JSON_VALUE ( expression , path [ RETURNING data_type ] )
Note
V SYSTÉMU SQL Server 2022 (16.x) a starších verzích není funkce RETURNING zahrnuta.
Arguments
expression
Výraz, který obvykle představuje název proměnné nebo sloupce obsahující 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
A JSON cesta, která určuje vlastnost k extrakci. 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
Datový typ, který chcete použít pro vrácenou hodnotu. Tento typ je podporován pouze v případě, že vstup je typem JSON. Podporované datové typy 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
Platí na: SQL Server 2025 (17.x) a novější verze.
Pokud nezadáte RETURNING:
Vrátí jednu textovou hodnotu typu nvarchar(4000). Kolace vrácené hodnoty odpovídá kolaci vstupního výrazu.
Pokud je hodnota větší než 4 000 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ž 4 000 znaků, použijte
OPENJSONmístoJSON_VALUE. Další informace naleznete v tématu OPENJSON.- V laxní režimu,
Pokud zahrnete RETURNING:
Vrátí hodnotu zadanou v data_type. Podporované datové typy 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ě bez ohledu na to, jestli je dokument JSON uložený ve formátu 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 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