Как разобрать массив JSON в таблицу SQL - PullRequest
0 голосов
/ 30 мая 2018

Я застрял с какой-то проблемой.Я понятия не имею, как читать все узлы в списке объектов JSON.

У меня есть 3 элемента (объекта) с заголовками [item1, item2, item3].

Мне нужно получить имя элемента и все внутренниеполя, как это: скриншот таблицы

Вот исходные данные JSON:

{
  "item1": {
    "title": "2",
    "value": null,
    "visible": true,
    "name": "item1",
    "enabled": true,
    "readonly": false,
    "id": "f1f46ce6-9d0b-4eaf-88b7-d35b23a4d2e4"
  },
  "item2": {
    "title": null,
    "value": null
    "visible": true,
    "name": "item2",
    "enabled": true,
    "readonly": false,
    "id": "da2b8a02-cfbd-4de8-8a33-74e2a484475a"
  },
  "item3": {
    "title": "",
    "value": null,
    "visible": true,
    "name": "item3",
    "enabled": true,
    "readonly": false,
    "id": "57ee45d6-41d7-45c2-b022-13220e31d2d2"
  }
}

Я нашел подход, как это сделать с OPENJSON () или JSON_VALUE () функций, но я все еще не могу перебрать все элементы ..

  SELECT * FROM OPENJSON (@json, '$.item1')
    WITH (
        ItemName VARCHAR(100) '$',
        Title VARCHAR(100) '$.name',
        Value VARCHAR(100) '$.value',
        Visible VARCHAR(100) '$.visible',
        Name VARCHAR(100) '$.name',
        Enabled VARCHAR(100) '$.enabled',
        ReadOnly VARCHAR(100) '$.readonly',
        Id VARCHAR(500) '$.id'
    )

1 Ответ

0 голосов
/ 30 мая 2018

Как-то так?

SELECT [Key].[key] AS [ItemName], [Value].*
FROM OPENJSON (@json, '$') AS [Key]
CROSS APPLY OPENJSON([Key].value)
    WITH (
        Title VARCHAR(100) '$.title',
        Value VARCHAR(100) '$.value',
        Visible VARCHAR(100) '$.visible',
        Name VARCHAR(100) '$.name',
        Enabled VARCHAR(100) '$.enabled',
        ReadOnly VARCHAR(100) '$.readonly',
        Id VARCHAR(500) '$.id'
    ) AS [Value]

"Трюк" - это крест, применяемый к графу json подобъектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...