SQL Server OPENJSON lecture json imbriqué
J'ai quelques json que je voudrais analyser dans SQL Server 2016. Il y a une hiérarchie de la structure de Projets->Structures->Propriétés. Je voudrais écrire une requête qui analyse l'ensemble de la hiérarchie, mais je ne veux pas de spécifier des éléments par numéro d'index ie je ne veux pas faire quelque chose comme ceci:
openjson (@json, '$[0]')
ou
openjson (@json, '$.structures[0]')
J'ai eu cette idée que je pouvais lire les valeurs de haut niveau les objets du projet, le long de la chaîne json qui représente les structures ci-dessous, qui pourraient ensuite être analysées séparément. Le problème est que le code suivant ne fonctionne pas:
declare @json nvarchar(max)
set @json = '
[
{
"IdProject":"97A76363-095D-4FAB-940E-9ED2722DBC47",
"Name":"Test Project",
"structures":[
{
"IdStructure":"CB0466F9-662F-412B-956A-7D164B5D358F",
"IdProject":"97A76363-095D-4FAB-940E-9ED2722DBC47",
"Name":"Test Structure",
"BaseStructure":"Base Structure",
"DatabaseSchema":"dbo",
"properties":[
{
"IdProperty":"618DC40B-4D04-4BF8-B1E6-12E13DDE86F4",
"IdStructure":"CB0466F9-662F-412B-956A-7D164B5D358F",
"Name":"Test Property 2",
"DataType":1,
"Precision":0,
"Scale":0,
"IsNullable":false,
"ObjectName":"Test Object",
"DefaultType":1,
"DefaultValue":""
},
{
"IdProperty":"FFF433EC-0BB5-41CD-8A71-B5F09B97C5FC",
"IdStructure":"CB0466F9-662F-412B-956A-7D164B5D358F",
"Name":"Test Property 1",
"DataType":1,
"Precision":0,
"Scale":0,
"IsNullable":false,
"ObjectName":"Test Object",
"DefaultType":1,
"DefaultValue":""
}
]
}
]
}
]';
select IdProject, Name, structures
from openjson (@json)
with
(
IdProject uniqueidentifier,
Name nvarchar(100),
structures nvarchar(max)
) as Projects
IdProject et le Nom de renvoi, aucun problème, mais pour une raison que je ne peut pas obtenir la imbriquée json détenus dans les structures. Au lieu de le contenu json elle retourne NULL:
Personne ne sait si cela est possible et si oui, ce que je fais mal?
source d'informationauteur Slade | 2016-05-13
Vous devez vous connecter pour publier un commentaire.
Si vous faites référence d'objet JSON ou d'une matrice, vous devez spécifier JSON clause:
Voir FAQ: https://msdn.microsoft.com/en-us/library/mt631706.aspx#Anchor_6
Si vous souhaitez appliquer OPENJSON sur le revenu des structures de tableau, vous pouvez utiliser quelque chose comme le code suivant:
À l'aide de la CROIX s'APPLIQUENT:
Typique! J'ai trouvé la réponse juste après la publication de la question. Vous avez besoin d'utiliser le 'json' mot-clé lors de la spécification des colonnes de retour: