SQL Server OPENJSON Lesen verschachtelten json
Habe ich einige json, ich möchte analysieren in der SQL Server-2016. Es gibt eine Hierarchie, Struktur, Projekte->Strukturen->Eigenschaften. Ich möchte eine Abfrage schreiben, die analysiert die gesamte Hierarchie, aber ich will nicht angeben, werden alle Elemente von index-Nummer ie ich nicht wollen, etwas zu tun wie dieser:
openjson (@json, '$[0]')
oder
openjson (@json, '$.structures[0]')
Hatte ich diese Idee, dass ich konnte Lesen Sie die Werte der top-level-Projekt-Objekte zusammen mit den json-string für die Strukturen darunter, die könnte dann analysiert werden, getrennt. Das problem ist, dass der folgende code nicht funktioniert:
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 und Name zurückgegeben, kein problem, aber für einige Grund, warum ich nicht bekommen kann die geschachtelte json statt in 'Strukturen'. Anstelle der json-Inhalte, die es nur gibt NULL zurück:
Weiß jemand, ob dies möglich ist und wenn ja, was mache ich falsch?
InformationsquelleAutor der Frage Slade | 2016-05-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie auf JSON-Objekt oder-array müssen Sie ALS JSON-Klausel:
Siehe FAQ: https://msdn.microsoft.com/en-us/library/mt631706.aspx#Anchor_6
Wenn Sie sich bewerben möchten OPENJSON auf das zurückgegebene array-Strukturen, die Sie verwenden können, sowas wie folgenden code:
InformationsquelleAutor der Antwort Jovan MSFT
Verwendung von CROSS APPLY:
InformationsquelleAutor der Antwort Ed.Schavelev
Typisch! Ich fand die Antwort nur nach der Veröffentlichung der Frage. Sie müssen verwenden Sie die 'json' key-word bei der Angabe der Spalten zurück:
InformationsquelleAutor der Antwort Slade