У меня есть JSON фид данных, поступающий на SQL Server 2016. Один из атрибутов, которые я должен проанализировать, содержит массив JSON. К сожалению, вместо реализации схемы ключ / значение исходная система отправляет каждому члену массива с другим именем атрибута. Имена атрибутов заранее неизвестны и могут изменяться / изменяться.
declare @json nvarchar(max) =
'{
"objects": [
{"foo":"fooValue"},
{"bar":"barValue"},
{"baz":"bazValue"}
]
}';
select * from openjson(json_query(@json, 'strict $.objects'));
Как видно:
- элемент 0 имеет Атрибут "foo"
- элемент 1 имеет атрибут "bar"
- элемент 2 имеет атрибут "baz":
+-----+--------------------+------+
| key | value | type |
+-----+--------------------+------+
| 0 | {"foo":"fooValue"} | 5 |
| 1 | {"bar":"barValue"} | 5 |
| 2 | {"baz":"bazValue"} | 5 |
+-----+--------------------+------+
В идеале хотелось бы чтобы проанализировать и спроецировать данные следующим образом:
+-----+---------------+----------------+------+
| key | attributeName | attributeValue | type |
+-----+---------------+----------------+------+
| 0 | foo | fooValue | 5 |
| 1 | bar | barValue | 5 |
| 2 | baz | bazValue | 5 |
+-----+---------------+----------------+------+
Напоминание: Имена атрибутов заранее неизвестны и могут изменяться / изменяться.