Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Применимо к: SQL Server 2016 (13.x) и более поздние версии:
конечная точка аналитики SQL
Azure
Synapse Analytics в хранилище Microsoft
Fabric в базе данных SQL Microsoft
Fabric в Microsoft Fabric
Синтаксис JSON_VALUE извлекает скалярное значение из строки JSON.
Чтобы извлечь объект или массив из строки JSON вместо скалярного значения, см. JSON_QUERY. Дополнительные сведения о различиях между JSON_VALUEJSON_QUERYними см. в разделе "Сравнение JSON_VALUE" и JSON_QUERY.
Соглашения о синтаксисе Transact-SQL
Syntax
JSON_VALUE ( expression , path [ RETURNING data_type ] )
Arguments
expression
Выражение. Обычно имя переменной или столбца, содержащего текст JSON.
Если JSON_VALUE объект JSON недействителен в выражении перед поиском значения, определяемого по пути, функция возвращает ошибку. Если JSON_VALUE значение, определенное по пути, не найдено, он сканирует весь текст и возвращает ошибку, если он находит JSON, который не является допустимым в выражении.
path
Путь JSON, указывающий на извлекаемое свойство. Дополнительные сведения см. в разделе "Выражения пути JSON" в ядре СУБД SQL.
В SQL Server 2017 (14.x) и в Базе данных SQL Azure можно указать переменную в качестве значения пути.
Если формат пути недействителен, JSON_VALUE возвращает ошибку.
data_type
Возвращает значение, указанное в типе SQL. Поддерживается только в том случае, если входные данные являются типом JSON. Поддерживаемые типы SQL: tinyint, smallint, int, bigint, decimal, numeric, float, real, char, varchar, varchar(max),nchar, nvarchar, nvarchar(max), date, time, datetime2 и datetimeoffset.
Возвращаемое значение
Если RETURNING он не включен:
Возвращает одно текстовое значение типа nvarchar(4000). Параметры сортировки для возвращаемого значения совпадают с параметрами сортировки входного выражения.
Если длина значения превышает 4000 символов:
- В режиме
JSON_VALUElax возвращаетсяNULL. - В строгом режиме
JSON_VALUEвозвращает ошибку.
Если необходимо возвращать скалярные значения, превышающие 4000 символов, используйте
OPENJSONвместоJSON_VALUEнего. Дополнительные сведения см. в разделе OPENJSON.- В режиме
Если RETURNING этот параметр включен:
Возвращает значение, указанное в типе SQL. Поддерживаемые типы SQL: tinyint, smallint, int, bigint, decimal, numeric, float, real, char, varchar, varchar(max),nchar, nvarchar, nvarchar(max), date, time, datetime2 и datetimeoffset.
Функции JSON работают одинаково, хранится ли документ JSON в varchar, nvarchar или в собственном типе данных JSON .
Remarks
Нестрогий и строгий режимы
Рассмотрим следующий текст 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"
}';
В следующей таблице сравнивается поведение JSON_VALUE в нестрогом режиме и в строгом режиме. Дополнительные сведения о спецификации дополнительного режима пути (lax или strict) см. в выражениях пути JSON в ядре СУБД SQL.
| Path | Возвращаемое значение в нестрогом режиме | Возвращаемое значение в строгом режиме | Дополнительная информация |
|---|---|---|---|
| $ | NULL |
Error | Не является скалярным значением. Вместо этого используйте JSON_QUERY. |
| $.info.type | N'1' | N'1' | N/a |
| $.info.address.town | N'Bristol' | N'Bristol' | N/a |
| $.info."address" | NULL |
Error | Не является скалярным значением. Вместо этого используйте JSON_QUERY. |
| $.info.tags | NULL |
Error | Не является скалярным значением. Вместо этого используйте JSON_QUERY. |
| $.info.type[0] | NULL |
Error | Не является массивом. |
| $.info.none | NULL |
Error | Свойство не существует. |
Examples
Пример 1
В приведенном ниже примере в результатах запроса используются значения свойств JSON town и state. Так как JSON_VALUE сохраняет параметры сортировки источника, порядок сортировки результатов зависит от сортировки столбца jsonInfo .
Note
(В этом примере предполагается, что таблица с именем Person.Person содержит jsonInfo столбец текста JSON, и что этот столбец имеет структуру, показанную ранее в обсуждении неструктурированного режима и строгого режима. AdventureWorks В примере базы данных Person таблица фактически не содержит jsonInfo столбец.)
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');
Пример 2
В приведенном ниже примере извлекается значение свойства JSON town в локальную переменную.
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
Пример 3
В приведенном ниже примере создаются вычисляемые столбцы на основе значений свойств 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')
);
Пример 4
В следующем примере извлекается значение из массива JSON и JSON_VALUE возвращается значение в качестве значения типа даты.
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