Как я могу l oop через массив json в SQL Server? - PullRequest
0 голосов
/ 10 апреля 2020

Я хочу l oop через данные, чтобы получить taggedEntityName и taggedEntityId:

{
    "data": [
              {
                  "taggedEntityName": "Organization",
                  "taggedEntityId": [
                                      145642,
                                      145625
                   ],
                  "index": 0
             },
            {
                 "taggedEntityName": "Job",
                 "taggedEntityId": [
                                      221138
                                   ],
                 "index": 1
             }
           ]
 }

1 Ответ

2 голосов
/ 10 апреля 2020

Если вы используете SQL Server 2016+, вам нужно использовать OPEN JSON () для анализа ввода JSON. Структура ввода JSON всегда важна, и в этом конкретном случае c вам необходимо использовать OPENSJON() с явной схемой дважды:

JSON:

DEClARE @json nvarchar(max) = N'{
    "data": [
              {
                  "taggedEntityName": "Organization",
                  "taggedEntityId": [
                                      145642,
                                      145625
                   ],
                  "index": 0
             },
            {
                 "taggedEntityName": "Job",
                 "taggedEntityId": [
                                      221138
                                   ],
                 "index": 1
             }
           ]
 }'

Заявление:

 SELECT j1.taggedEntityName, j2.taggedEntityId
 FROM OPENJSON(@json, '$.data') WITH (
    taggedEntityName varchar(50) '$.taggedEntityName',
    taggedEntityId nvarchar(max) '$.taggedEntityId'  AS JSON
 ) j1
 CROSS APPLY OPENJSON(j1.taggedEntityId) WITH (
    taggedEntityId int '$'
 ) j2

Результат:

taggedEntityName  taggedEntityId
Organization      145642
Organization      145625
Job               221138
...