2017-07-17 6 views
0

Ich versuche, Powershell zu verwenden, um mit einer API über die Invoke-RestMethod-Funktion zu kommunizieren.Powershell: Referenzieren von Werten in verschachtelten JSON-Arrays

Von was ich sagen kann, gibt dies die JSON-Antwort als ein Powershell-Objekt (Array) zurück. Das Ergebnis hat 2 Ebenen, die eine Liste von Projekten und dann benutzerdefinierte Felder sind, die für diese Projekte gesetzt werden.

Ich versuche, jedes Projekt und dann durch jedes benutzerdefinierte Feld des Projekts durchlaufen und dann diese Informationen verwenden, um verschiedene SQL-Aktionen durchzuführen.

Im Moment kämpfe ich mit der Tatsache, dass ich ein ForEach verwenden kann, um die "Daten" der obersten Ebene als Projekte zu durchlaufen, aber wenn ich versuche, die benutzerdefinierten Felder für das Projekt zu durchlaufen, durchläuft es tatsächlich alle benutzerdefinierte Felder für alle Projekte.

Ich habe so weit mit meiner begrenzten Erfahrung mit Powershell und viele Stunden suchen und lesen. Ich bin mir aber sicher, dass ich das ganze Konzept hier einfach nicht verstehe und hoffentlich ist es nur ein einfaches Problem mit der Art, wie ich die Daten referenzieren möchte ...

Dies ist ein Beispiel für die API-Antwort.

"TotalPages":1, "TotalRecords":2, "Data":[ 
      { 
         "code":"00000014", 
         "description":"Digital Strategy", 
         "customFieldValues":[ 
            { 
               "key":135, 
               "name":"Department", 
               "value":"Sales" 
            } 
         ] 
      }, 
      { 
         "code":"T3FA", 
         "description":"Survey coding", 
         "customFieldValues":[ 
            { 
               "key":135, 
               "name":"Department", 
               "value":"Finance" 
            } 
         ] 
      }    ] } 

Und das ist mein einfacher Code zum Durchlaufen der Antwort.

$APIResponse = Invoke-RestMethod -Uri $Uri -Headers $Headers 

ForEach ($d in $APIResponse.data) { 
    "Project Code = " + $d.code + ", Project Description = " + $d.description 
    ForEach ($e in $APIResponse.data.customFieldValues) { 
     "CustomField Key " + $e.key + ", Name " + $e.name + ", Value " + $e.value 
    } 
} 

Ich denke, es tut, was es zu tun in gefragt ist, daß sie durch die ganze customFieldValue ist Looping, aber ich bin braucht es nur eine Schleife durch die benutzerdefinierte Felder mit dem Projekt, das ich zur Zeit Schleifen, wenn Das macht Sinn?

Antwort

1

Okay ich bin mir nicht sicher, wie ich das vorher nicht gefunden habe, aber einige Versuch und Irrtum führen mich dazu, das scheint gut zu funktionieren.

Im zweiten FürJeden ersetzt ich APIResponse.data.customFieldValues ​​$ mit $ d.customFieldValues ​​, die sie schauen durch nur das aktuell ausgewählte Projekt zu machen scheint.

$APIResponse = Invoke-RestMethod -Uri $Uri -Headers $Headers 

ForEach ($d in $APIResponse.data) { 
    "Project Code = " + $d.code + ", Project Description = " + $d.description 
    ForEach ($e in $d.customFieldValues) { 
     "CustomField Key " + $e.key + ", Name " + $e.name + ", Value " + $e.value 
    } 
} 
Verwandte Themen