#sql #json #open-json
Вопрос:
Я очень старался извлечь данные из сообщения JSON, которое пытаюсь загрузить в некоторые таблицы. Я могу заставить работать это сообщение с одной парой имя/значение над ним, но в другом сообщении есть вторая внешняя пара имя/значение.
DECLARE @json nvarchar(max) =
'{
"request":
{
"requestId" : "3a282d32-4ed4-48e8-a6c0-23cf4921737e",
"modelType" : "NEW"
}
}'
select 'request' as title, request.requestId , request.modelType
from openjson(@json)
with
(
request nvarchar(max) as json
)
as Projects
cross apply openjson (Projects.request)
with
(
requestId nvarchar(50),
modelType nvarchar(50)
) as request
Это возвращает строку, как и ожидалось, но как мне написать запрос, если выше указана дополнительная пара имя/значение? Подобный этому:
DECLARE @json nvarchar(max) =
'{
"request": {
"request":
{
"requestId" : "3a282d32-4ed4-48e8-a6c0-23cf4921737e",
"modelType" : "NEW"
}
}
}'
Может ли кто-нибудь помочь. Я знаю, что это, вероятно, действительно просто, но я, кажется, не могу понять, как это сделать. Я единственный человек в своей компании, работающий с JSON, иначе я бы буквально просто спросил их.
Заранее благодарю вас!
Ответ №1:
cross apply
Для достижения цели необходим еще один.
select 'request' as title, request.requestId , request.modelType
from openjson(@json)
with
(
request nvarchar(max) as json
)
as Projects
cross apply openjson (Projects.request)
with
(
request nvarchar(max) as json
) as subrequest
cross apply openjson (subrequest.request)
with
(
requestId nvarchar(50),
modelType nvarchar(50)
) as request
демонстрация в бд<>скрипка<>
Комментарии:
1. Вот оно что! Теперь я не знаю, что я делал, но мой выглядел очень похожим на ваш, когда я возился, но это было именно так! Почему это было так трудно для меня, я никогда не пойму. Я думаю, что, возможно, я пытался использовать ПЕРЕКРЕСТНОЕ ПРИМЕНЕНИЕ в неправильном месте для второй пары значений