Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Область применения:SQL Server 2016 (13.x) и более поздних
версий База данных SQL Azure Управляемый экземпляр SQL Azure
Azure Synapse Analytics (только бессерверный пул SQL)
Используйте выражения пути JSON для создания ссылок на свойства объектов JSON.
Выражение пути нужно указывать при вызове следующих функций.
- При вызове OPENJSON для создания реляционного представления данных JSON.
- При вызове JSON_VALUE с целью извлечения значения из текста JSON.
- При вызове JSON_QUERY для извлечения объекта JSON или массива.
- При вызове JSON_MODIFY для обновления значения свойства в строке JSON.
Элементы выражения пути
Выражение пути состоит из двух компонентов.
Необязательный режим пути с значением
lax
илиstrict
.Сам путь .
режим пути
В начале выражения пути при необходимости объявите режим пути, указав ключевое слово lax
или strict
. Значение по умолчанию — lax
.
В
lax
режиме функция возвращает пустые значения, если выражение пути содержит ошибку. Например, если вы запрашиваете значение$.name
, а текст JSON не содержитname
ключ, функция возвращает значение NULL, но не вызывает ошибку.В
strict
режиме функция вызывает ошибку, если выражение пути содержит ошибку.
В следующем запросе в выражении пути явно задан режим lax
.
DECLARE @json AS NVARCHAR (MAX);
SET @json = N'{ ... }';
SELECT *
FROM OPENJSON (@json, N'lax $.info');
Путь
Объявив необязательный режим пути, укажите сам путь.
Знак доллара (
$
) представляет элемент контекста.Путь свойства — это набор действий пути. Действия пути могут содержать следующие элементы и операторы.
Имена ключей. Например,
$.name
и$."first name"
. Если имя ключа начинается с знака доллара или содержит специальные символы, такие как пробелы или операторы точек(.
), окружают его кавычками.Элементы массива. Например,
$.product[3]
. Массивы отсчитываются от нуля.Оператор "точка" (
.
) указывает на элемент объекта. Например, в$.people[1].surname
surname
является дочерним элементомpeople
.Поиск по подстановочным знакам массива и диапазону также поддерживается, если входные данные являются значением типа JSON.
Поддержка подстановочных знаков массива и диапазона
Примечание.
Поддержка подстановочных знаков массива и диапазона в настоящее время доступна в предварительной версии и доступна только в предварительной версии SQL Server 2025 (17.x).
Предварительная версия SQL Server 2025 (17.x) расширяет выражение пути ANSI SQL/JSON для поддержки подстановочного знака массива. Подстановочный знак массива позволяет указать все элементы, диапазон элементов, список элементов или специальный маркер "last" для указания последнего значения в массиве JSON. Массивы SQL/JSON используют отсчитываемый от нуля индекс. Путь SQL/JSON с подстановочными знаками можно использовать в JSON_QUERY, JSON_PATH_EXISTS и JSON_CONTAINS.
Хотя JSON_VALUE
функция поддерживает выражение пути SQL/JSON, возвращаемое значение JSON_VALUE
функции является скалярным SQL, поэтому функция всегда возвращается NULL
для любого пути SQL/JSON, который указывает на объект ИЛИ массив JSON. Подстановочные знаки массива поддерживаются только в том случае, если входные данные являются типом JSON .
В следующем синтаксисе показано, как можно использовать подстановочный знак, диапазон и специальный маркер last
:
path[elements ]
elements ::= {
*
| number
| number to number
| last
| {number...[, number] }
}
Специальный маркер last
можно использовать вместо значения числа. Если задан диапазон, необходимо указать диапазон в порядке увеличения.
Примеры некоторых допустимых выражений пути SQL/JSON:
Путь | Описание |
---|---|
$[*] |
Все элементы |
$[0] |
Первый элемент |
$[0 to 2] |
Первые три элемента |
$[last] |
Последний элемент |
$[last, 0] |
Недействительное |
$[last, 2, 0, last] |
Недействительное |
$.creditcards[0].type |
Возвращает значение свойства type первого элемента в creditcards массиве |
$.credit_cards[*].type |
Возвращает значение свойства type всех элементов в creditcards массиве |
$.credit_cards[0, 2].type |
Возвращает значение свойства типа первого и третьего элемента в creditcards массиве |
$.credit_cards[1 to 3].type |
Возвращает значение свойства type второго к четвертому элементу в массиве creditcards |
$.credit_cards[last].type |
Возвращает значение свойства type последнего элемента в creditcards массиве |
$.credit_cards[last, 0].type |
Возвращает значение свойства типа последнего и первого элемента в creditcards массиве |
Примеры
В примерах этого раздела используется следующий текст JSON.
{
"people": [{
"name": "John",
"surname": "Doe"
}, {
"name": "Jane",
"surname": null,
"active": true
}]
}
В таблице ниже приведены некоторые примеры выражений пути.
Выражение пути | Значение |
---|---|
$.people[0].name |
John |
$.people[1] |
{ "name": "Jane", "surname": null, "active": true } |
$.people[1].surname |
NULL |
$ |
{ "people": [ { "name": "John", "surname": "Doe" },{ "name": "Jane", "surname": null, "active": true } ] } |
$.people[last].name |
["Jane"] |
$.people[0 to 1].name |
["John","Jane"] |
$.people[0, 1].name |
["John","Jane"] |
Как встроенные функции обрабатывают повторяющиеся пути
Если текст JSON содержит повторяющиеся свойства , например, два ключа с одинаковым именем на одном уровне — JSON_VALUE
и JSON_QUERY
функции возвращают только первое значение, соответствующее пути. Чтобы проанализировать объект JSON, содержащий повторяющиеся ключи и возвращать все значения, используйте OPENJSON
, как показано в следующем примере.
DECLARE @json AS NVARCHAR (MAX);
SET @json = N'{"person":{"info":{"name":"John", "name":"Jack"}}}';
SELECT value
FROM OPENJSON (@json, '$.person.info');
Дополнительные сведения о JSON в SQL Server и базе данных SQL Azure
Визуальные сведения о встроенной поддержке JSON в SQL Server и Базе данных SQL Azure см. в следующем видео:
- JSON as a bridge between NoSQL and relational worlds (JSON как мост между NoSQL и реляционными решениями)