Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: SQL Server 2016 (13.x) и более поздним версиям
,Azure SQL Database
,Azure SQL Managed Instance
,Azure Synapse Analytics
,конечной точке аналитики SQL в Microsoft Fabric
,хранилищу в Microsoft Fabric
,SQL базе данных в предварительной версии Microsoft Fabric
Синтаксис JSON_VALUE
извлекает скалярное значение из строки JSON.
Чтобы извлечь объект или массив из строки JSON вместо скалярного значения, см. раздел JSON_QUERY (Transact-SQL). Дополнительные сведения о различиях между JSON_VALUE
JSON_QUERY
ними см. в разделе "Сравнение JSON_VALUE" и JSON_QUERY.
Соглашения о синтаксисе Transact-SQL
Syntax
JSON_VALUE ( expression , path )
Arguments
expression
An expression. Обычно имя переменной или столбца, содержащего текст JSON.
Если JSON_VALUE
объект JSON недействителен в выражении перед поиском значения, определяемого по пути, функция возвращает ошибку. Если JSON_VALUE
значение, определенное по пути, не найдено, он сканирует весь текст и возвращает ошибку, если он находит JSON, который не является допустимым в любом месте выражения.
path
Путь JSON, указывающий на извлекаемое свойство. Дополнительные сведения см. в разделе "Выражения пути JSON".
В SQL Server 2017 (14.x) и в Базе данных SQL Azure можно указать переменную в качестве значения пути.
Если формат пути недействителен, JSON_VALUE
возвращает ошибку.
Return value
Возвращает одно текстовое значение типа nvarchar(4000). Параметры сортировки для возвращаемого значения совпадают с параметрами сортировки входного выражения.
Если длина значения превышает 4000 символов:
В режиме
JSON_VALUE
lax возвращаетсяNULL
.В строгом режиме
JSON_VALUE
возвращает ошибку.
Если необходимо возвращать скалярные значения, превышающие 4000 символов, используйте OPENJSON
вместо JSON_VALUE
него. Дополнительные сведения см. в разделе OPENJSON (Transact-SQL).
Функции JSON работают одинаково, хранится ли документ JSON в varchar, nvarchar или в собственном типе данных JSON .
Remarks
Нестрогий и строгий режимы
Рассмотрим следующий текст JSON:
DECLARE @jsonInfo NVARCHAR(MAX)
SET @jsonInfo=N'{
"info":{
"type":1,
"address":{
"town":"Bristol",
"county":"Avon",
"country":"England"
},
"tags":["Sport", "Water polo"]
},
"type":"Basic"
}'
В следующей таблице сравнивается поведение JSON_VALUE
в нестрогом режиме и в строгом режиме. Дополнительные сведения о спецификации режима необязательного пути (lax или strict) см. в выражениях пути JSON.
Path | Возвращаемое значение в нестрогом режиме | Возвращаемое значение в строгом режиме | More info |
---|---|---|---|
$ | 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
Example 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')
Example 2
В приведенном ниже примере извлекается значение свойства JSON town
в локальную переменную.
DECLARE @jsonInfo NVARCHAR(MAX)
DECLARE @town 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
Example 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')
)