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 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

Transact-SQL konvence syntaxe

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_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ž 4000 znaků, použijte OPENJSON místo JSON_VALUE. Další informace najdete v tématu OPENJSON.

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