Анализ и преобразование данных JSON с помощью OPENJSON
Область применения: SQL Server 2016 (13.x) и более поздних версий База данных SQL Azure Управляемый экземпляр SQL Azure Azure Synapse Analytics
Функция OPENJSON
набора строк преобразует текст JSON в набор строк и столбцов. После преобразования коллекции JSON в набор OPENJSON
строк можно запустить любой SQL-запрос к возвращаемым данным или вставить его в таблицу SQL Server. Дополнительные сведения о работе с данными JSON в ядро СУБД SQL Server см. в статье JSON data in SQL Server.
Функция OPENJSON
принимает один объект JSON или коллекцию объектов JSON и преобразует их в одну или несколько строк. По умолчанию OPENJSON
функция возвращает следующие данные:
- Из объекта JSON функция возвращает все пары "ключ-значение", которые она находит на первом уровне.
- Из массива JSON она возвращает все элементы массива вместе с их индексами.
Можно добавить необязательное WITH
предложение, чтобы предоставить схему, которая явно определяет структуру выходных данных.
OPENJSON с выходными данными по умолчанию
При использовании OPENJSON
функции без предоставления явной схемы для результатов ( то есть WITH
без предложения после OPENJSON
- функция возвращает таблицу со следующими тремя столбцами:
- Свойство
name
входного объекта (или индекс элемента в входном массиве). - Свойство
value
или элемент массива. - (
type
например, строка, число, логическое значение, массив или объект).
OPENJSON
возвращает каждое свойство объекта JSON или каждый элемент массива в виде отдельной строки.
В следующем примере используется OPENJSON
схема по умолчанию без необязательного WITH
предложения и возвращается одна строка для каждого свойства объекта JSON.
DECLARE @json NVARCHAR(MAX);
SET @json='{ "name": "John", "surname": "Doe", "age": 45, "skills": [ "SQL", "C#", "MVC" ]}';
SELECT *
FROM OPENJSON(@json);
Вот результирующий набор.
key | значение | type |
---|---|---|
name |
John |
1 |
surname |
Doe |
1 |
age |
45 |
2 |
skills |
[ "SQL" ,"C#" ,"MVC" ] |
4 |
Дополнительные сведения и примеры см. в разделе "Использование OPENJSON" с схемой по умолчанию.
Сведения о синтаксисе и использовании см. в разделе OPENJSON.
Выходные данные OPENJSON с явной структурой
При указании схемы результатов с помощью WITH
предложения OPENJSON
функции функция возвращает таблицу только с столбцами, заданными в предложении WITH
. В необязательном WITH
предложении указывается набор выходных столбцов, их типов и пути исходных свойств JSON для каждого выходного значения. OPENJSON
Выполняет итерацию по массиву объектов JSON, считывает значение по указанному пути для каждого столбца и преобразует значение в указанный тип.
В следующем примере используется OPENJSON
схема выходных данных, явно указанных в предложении WITH
.
DECLARE @json NVARCHAR(MAX);
SET @json = N'[
{
"Order": {
"Number": "SO43659",
"Date": "2024-05-31T00:00:00"
},
"AccountNumber": "AW29825",
"Item": {
"Price": 2024.9940,
"Quantity": 1
}
},
{
"Order": {
"Number": "SO43661",
"Date": "2024-06-01T00:00:00"
},
"AccountNumber": "AW73565",
"Item": {
"Price": 2024.9940,
"Quantity": 3
}
}
]';
SELECT *
FROM OPENJSON(@json) WITH (
Number VARCHAR(200) '$.Order.Number',
DATE DATETIME '$.Order.Date',
Customer VARCHAR(200) '$.AccountNumber',
Quantity INT '$.Item.Quantity'
);
Вот результирующий набор.
Число | Дата | Клиент | Количество |
---|---|---|---|
SO43659 |
2024-05-31T00:00:00 |
AW29825 |
1 |
SO43661 |
2024-06-01T00:00:00 |
AW73565 |
3 |
Эта функция возвращает и форматирует элементы массива JSON.
Для каждого элемента в массиве
OPENJSON
JSON создается новая строка в выходной таблице. Два элемента в массиве JSON конвертируются в две строки в таблице результатов.Для каждого столбца, указанного с помощью синтаксиса
colName type json_path
,OPENJSON
преобразует значение, найденное в каждом элементе массива по указанному пути к указанному типу. В этом примере значения для столбцаDate
берутся из каждого элемента в пути$.Order.Date
и преобразуются в значения даты и времени.
Дополнительные сведения и примеры см. в разделе "Использование OPENJSON" с явной схемой (SQL Server).
Сведения о синтаксисе и использовании см. в разделе OPENJSON.
OPENJSON необходим уровень совместимости 130
Функция OPENJSON
доступна только на уровне 130
совместимости и больше. Если уровень совместимости базы данных ниже130
, SQL Server не может найти и запустить функциюOPENJSON
. Другие встроенные функции JSON доступны на всех уровнях совместимости.
Уровень совместимости можно проверить в sys.databases
представлении или в свойствах базы данных, а также изменить уровень совместимости базы данных с помощью следующей команды:
ALTER DATABASE <DatabaseName> SET COMPATIBILITY_LEVEL = 130;
Связанный контент
- JSON as a bridge between NoSQL and relational worlds (JSON как мост между NoSQL и реляционными решениями)
- OPENJSON (Transact-SQL)