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