Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Gäller för: SQL Server 2016 (13.x) och senare versioner
Azure SQL Database
Azure SQL Managed Instance
Azure Synapse Analytics
SQL Analytics-slutpunkt i Microsoft Fabric
Warehouse i Microsoft Fabric
SQL Database i Förhandsversion av Microsoft Fabric
Syntaxen JSON_VALUE extraherar ett skalärt värde från en JSON-sträng.
Information om hur du extraherar ett objekt eller en matris från en JSON-sträng i stället för ett skalärt värde finns i JSON_QUERY. Information om skillnaderna mellan JSON_VALUE och JSON_QUERYfinns i Jämför JSON_VALUE och JSON_QUERY.
Transact-SQL syntaxkonventioner
Syntax
JSON_VALUE ( expression , path [ RETURNING data_type ] )
Arguments
expression
Ett uttryck. Vanligtvis namnet på en variabel eller en kolumn som innehåller JSON-text.
Om JSON_VALUE hittar JSON som inte är giltigt i uttrycket innan det hittar värdet som identifieras av sökvägen returnerar funktionen ett fel. Om JSON_VALUE inte hittar det värde som identifieras av sökvägen söker den igenom hela texten och returnerar ett fel om det hittar JSON som inte är giltigt någonstans i uttrycket.
path
En JSON-sökväg som anger vilken egenskap som ska extraheras. Mer information finns i JSON Path Expressions in the SQL Database Engine (JSON Path Expressions in the SQL Database Engine).
I SQL Server 2017 (14.x) och i Azure SQL Database kan du ange en variabel som värdet för sökvägen.
Om sökvägens format inte är giltigt JSON_VALUE returnerar ett fel.
data_type
Returnera det värde som anges i SQL-typen. Stöds endast om indata är en JSON-typ. De SQL-typer som stöds är: tinyint, smallint, int, bigint, decimal, numerisk, float, real, char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), date, time, datetime2 och datetimeoffset.
Returvärde
Om RETURNING inte ingår:
Returnerar ett enskilt textvärde av typen nvarchar(4000). Sortering av det returnerade värdet är samma som sortering av indatauttrycket.
Om värdet är större än 4 000 tecken:
- I slappt läge
JSON_VALUEreturnerarNULL. - I strikt läge returnerar
JSON_VALUEett fel.
Om du måste returnera skalärvärden som är större än 4 000 tecken använder du
OPENJSONi stället förJSON_VALUE. Mer information finns i OPENJSON.- I slappt läge
Om RETURNING ingår:
Returnerar det värde som anges i SQL-typen. De SQL-typer som stöds är: tinyint, smallint, int, bigint, decimal, numerisk, float, real, char, varchar, varchar(max), nchar, nvarchar, nvarchar(max), date, time, datetime2 och datetimeoffset.
JSON-funktioner fungerar på samma sätt oavsett om JSON-dokumentet lagras i varchar, nvarchar eller den interna json-datatypen .
Remarks
Släpphänt läge och strikt läge
Tänk på följande JSON-text:
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"
}';
I följande tabell jämförs beteendet för JSON_VALUE i slappt läge och i strikt läge. Mer information om den valfria sökvägslägesspecifikationen (slapp eller strikt) finns i JSON Path Expressions in the SQL Database Engine (JSON Path Expressions in the SQL Database Engine).
| Path | Returnera värde i släpphänt läge | Returnera värde i strikt läge | Mer information |
|---|---|---|---|
| $ | NULL |
Error | Inte ett skalärt värde. Använd JSON_QUERY i stället. |
| $.info.type | N'1' | N'1' | N/a |
| $.info.address.town | N'Bristol' | N'Bristol' | N/a |
| $.info." adress" | NULL |
Error | Inte ett skalärt värde. Använd JSON_QUERY i stället. |
| $.info.tags | NULL |
Error | Inte ett skalärt värde. Använd JSON_QUERY i stället. |
| $.info.type[0] | NULL |
Error | Inte en matris. |
| $.info.none | NULL |
Error | Egenskapen finns inte. |
Examples
Exempel 1
I följande exempel används värdena för JSON-egenskaperna town och state i frågeresultat. Eftersom JSON_VALUE bevarar sortering av källan beror sorteringsordningen för resultaten på sortering av jsonInfo kolumnen.
Note
(Det här exemplet förutsätter att en tabell med namnet Person.Person innehåller en jsonInfo kolumn med JSON-text och att den här kolumnen har strukturen som visades tidigare i diskussionen om släpphänt läge och strikt läge. AdventureWorks I exempeldatabasen Person innehåller tabellen inte någon jsonInfo kolumn.)
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');
Exempel 2
I följande exempel extraheras värdet för JSON-egenskapen town till en lokal variabel.
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
Exempel 3
I följande exempel skapas beräknade kolumner baserat på värdena för JSON-egenskaper.
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')
);
Exempel 4
I följande exempel extraheras ett värde från JSON-matrisen med och JSON_VALUE returnerar värdet som ett datumtypsvärde.
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