Analizar JSON matriz en donde cada miembro tiene diferentes esquemas, sino misma estructura general

Pittsburgh DBA:

Tengo unos datos JSON feed entrada en SQL Server 2016. Uno de los atributos que debe analizar contiene una matriz JSON. Por desgracia, en lugar de implementar un diseño de clave / valor, el sistema de origen envía a cada miembro de la matriz con un nombre de atributo diferente. Los nombres de los atributos no son conocidos de antemano, y están sujetas a cambio / volatilidad.

declare @json nvarchar(max) =
'{
    "objects": [
        {"foo":"fooValue"},
        {"bar":"barValue"},
        {"baz":"bazValue"}
    ]
}';

select * from openjson(json_query(@json, 'strict $.objects'));

Como puedes ver:

  • 0 elemento tiene un atributo "foo"
  • elemento 1 tiene un atributo "bar"
  • elemento 2 tiene un atributo "Baz":
+-----+--------------------+------+
| key |       value        | type |
+-----+--------------------+------+
|   0 | {"foo":"fooValue"} |    5 |
|   1 | {"bar":"barValue"} |    5 |
|   2 | {"baz":"bazValue"} |    5 |
+-----+--------------------+------+

Idealmente, me gustaría analizar y proyectar los datos de este modo:

+-----+---------------+----------------+------+
| key | attributeName | attributeValue | type |
+-----+---------------+----------------+------+
|   0 | foo           | fooValue       |    5 |
|   1 | bar           | barValue       |    5 |
|   2 | baz           | bazValue       |    5 |
+-----+---------------+----------------+------+

Recordatorio: Los nombres de los atributos no son conocidos de antemano, y están sujetas a cambio / volatilidad.

LPTR:
select o.[key], v.* --v.[key] as attributeName, v.value as attributeValue
from openjson(json_query(@json, 'strict $.objects')) as o
cross apply openjson(o.[value]) as v;

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=406702&siteId=1
Recomendado
Clasificación