Sdílet prostřednictvím


JSON_VALUE (Transact-SQL)

Platí pro: SQL Server 2016 (13.x) a novější verze koncového bodu Azure SQL DatabaseAzure SQL Managed InstanceAzure Synapse Analyticsv Microsoft FabricWarehouse v databázi Microsoft FabricSQL 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

Transact-SQL konvence syntaxe

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_VALUE vrátí .NULL
    • V přísném režimu JSON_VALUE vrátí chybu.

    Pokud potřebujete vrátit skalární hodnoty větší než 4 000 znaků, použijte OPENJSON místo JSON_VALUE. Další informace naleznete v tématu OPENJSON.

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