Чтение массива json в строки в SQL Server
Учитывая приведенные ниже примеры данных json, как я могу написать запрос, чтобы получить данные массива за один шаг? Моя цель - иметь по одной строке для каждого элемента в массиве ActionRecs (4). Мой фактический JSON более сложный, но я думаю, что это хороший пример моей цели.
declare @json2 nvarchar(max)
set @json2 = '{
"RequestId": "1",
"ActionRecs": [
{
"Type": "Submit",
"Employee": "Joe"
},
{
"Type": "Review",
"Employee": "Betty"
},
{
"Type": "Approve",
"Employee": "Sam"
},
{
"Type": "Approve",
"Employee": "Bill"
}
]
}'
SELECT x.*
, JSON_QUERY(@json2, '$.ActionRecs') as ActionArray
from OPENJSON(@json2)
with (Id varchar(5) '$.RequestId') as x
1 ответ
Одним из возможных подходов является использование OPENJSON()
а также CROSS APPLY
:
DECLARE @json nvarchar(max)
SET @json = '{
"RequestId": "1",
"ActionRecs": [
{
"Type": "Submit",
"Employee": "Joe"
},
{
"Type": "Review",
"Employee": "Betty"
},
{
"Type": "Approve",
"Employee": "Sam"
},
{
"Type": "Approve",
"Employee": "Bill"
}
]
}'
SELECT i.Id, a.[Type], a.[Employee]
FROM OPENJSON(@json)
WITH (
Id varchar(5) '$.RequestId',
Actions nvarchar(max) '$.ActionRecs' AS JSON
) AS i
CROSS APPLY (
SELECT *
FROM OPENJSON(i.Actions)
WITH (
[Type] nvarchar(max) '$.Type',
[Employee] nvarchar(max) '$.Employee'
)
) a
Выход:
Id Type Employee
1 Submit Joe
1 Review Betty
1 Approve Sam
1 Approve Bill