Справочная информация:
У меня есть столбец JSON nvarchar(max)
с именем 'questions', который выглядит как настоящий пример из одной строки ...
{"211":0,"212":0,"213":0,"214":0,"215":0,"216":0,"217":0,"218":0,"219":0,"220":"1","221":"1","222":"1","223":"1","224":"1","225":"1","226":"1","227":"1","228":"1","229":"1","230":"1","231":"1","232":"1"}
В настоящее время я генерирую этот пример фрагмента JSON для примера 'call' ...
[
{
"call": {
"id": 200643,
"yes_answers": [
{
"question_id": "220"
},
{
"question_id": "221"
},
{
"question_id": "222"
},
{
"question_id": "223"
},
{
"question_id": "224"
},
{
"question_id": "225"
},
{
"question_id": "226"
},
{
"question_id": "227"
},
{
"question_id": "228"
},
{
"question_id": "229"
},
{
"question_id": "230"
},
{
"question_id": "231"
},
{
"question_id": "232"
}
]
}
}
]
.. используя этот запрос ...
select c.call_id as [call.id],
(
select x.[key]
from [call].[triage_questions] tq
cross apply openjson(questions, '$') as x
where value = 1 and tq.call_id = c.call_id
for json path
) as [call.yes_answers]
from [call].[dimension] c
where call_id = 200643
for json path
Мой вопрос:
Мне не нравится, как форматируется массив yes_answers.Я хотел бы что-то вроде этого:
[
{
"call": {
"id": 200643,
"yes_answers": [
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232
]
}
}
]
Это действительно?или я должен был свернуть это по-другому?или просто оставить его?
Я буду использовать SQL, чтобы ссылаться на каждый вопрос_ид в массиве "yes_answers" на справочную таблицу, где я ищу флаг true / false, связанный с этим вопросом.JSON не будет покидать SQL в это время, если это имеет значение.
РЕДАКТИРОВАТЬ:
Благодаря @ Tomato32 , я нашел этот другой вопрос , который помог мне подойти достаточно близко, я думаю.
Мой запрос теперь выглядит так ...
select c.call_id as [call.id],
json_query(replace(replace((
select x.[key] as question_id
from [call].[triage_questions] tq
cross apply openjson(questions, '$') as x
where value = 1 and tq.call_id = c.call_id
order by x.[key]
for json path
), N'{"question_id":', N''), '"}', '"')) as [call.yes_answers]
from [call].[dimension] c
where call_id = 200643
for json path
И мой полученный JSON выглядит так ...
[
{
"call": {
"id": 200643,
"yes_answers": [
"220",
"221",
"222",
"223",
"224",
"225",
"226",
"227",
"228",
"229",
"230",
"231",
"232"
]
}
}
]
Я не могу избавиться откавычки вокруг значений int в массиве "yes_answers", но я не думаю, что это будет иметь значение, и я не собираюсь тратить на это время :) Спасибо всем !!!