Поделиться через


Выражения пути 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).

Элементы выражения пути

Выражение пути состоит из двух компонентов.

  1. Необязательный компонент path mode со значением lax или strict.

  2. Сам путь .

режим пути

В начале выражения пути можно при необходимости объявить режим пути, указав ключевое слово 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].surnamesurname является дочерним элементом 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 см. в следующих видео.

См. также

OPENJSON (Transact-SQL)
JSON_VALUE (Transact-SQL)
JSON_QUERY (Transact-SQL)