sunnyrainyday
Goto Top

Json, Powershell und Arrays

Moin Zusammen,

Mit Sicherheit gibt es hier jemanden der mir mit meinem Powershell-Problem behilflich sein kann face-smile

Ich stehe wieder vor einem Problem und komme nicht weiter. Weiter unten findet Ihr eine .json Datei mit Inhalt "Buch1" und "Buch2" die mit Keys und Werten gefüllt sind.
Ich möchte nun ein weiteres Array mit einem 3. Buch(Buch3) mit den Keys und Werten füllen. Die Funktion die ich erstellt habe geht nicht da es die Eigenschaft "Buch3" für das Objekt nicht gefunden wurde.

Wie bewerkstellige ich das am besten? Vielen Dank.

.json:
{
    "Buch1":  [  
                  {
                      "Titel":  "Spawn"  
                  },
                  {
                      "Autor":  " Todd McFarlane"  
                  }
              ],
    "Buch2":  [  
                  {
                      "Titel":  "Spiderman"  
                  },
                  {
                      "Autor":  "Stan Lee"  
                  }
              ]
}

PS Funktion:
function Add {
    $NewKeyName = "Titel"  
    $NewKeyValue = "X-men"  
    $NewKeyName1 = "Autor"  
    $NewKeyValue1 = "Sten Lee"  
    $Block = "Buch3"  
    $jsonfile = "C:\test\config.json"  
    $json = Get-Content $jsonfile | ConvertFrom-json
    $json.$Block += @{$NewKeyName=$NewKeyValue}
    $json.$Block += @{$NewKeyName1=$NewKeyValue1}
    $json | ConvertTo-Json | Set-Content $jsonfile
}


Vielen Dank im Voraus!

Content-Key: 366068

Url: https://administrator.de/contentid/366068

Printed on: April 20, 2024 at 01:04 o'clock

Member: colinardo
Solution colinardo Feb 26, 2018 updated at 10:53:22 (UTC)
Goto Top
Servus @SunnyRainyDay ,
machst für deinen im Thread geposteten JSON Aufbau so
#......
$json | Add-Member -MemberType NoteProperty -Name "Buch3" -Value @([pscustomobject]@{Titel="TitelXYZ"},[pscustomobject]@{Autor="Max Muster"})  
# .....
Nach einem Convert mit ConvertFrom-JSON hast du ja erst einmal ein PSCustomObjekt, und um diesem weitere Eigenschaften zu verpassen nutzt du hier Add-Member mit dem Buchnamen als Name der Eigenschaft und als Value ein Array aus weiteren CustomObjects.

$string = @"  
{
    "Buch1":  [  
                  {
                      "Titel":  "Spawn"  
                  },
                  {
                      "Autor":  " Todd McFarlane"  
                  }
              ],
    "Buch2":  [  
                  {
                      "Titel":  "Spiderman"  
                  },
                  {
                      "Autor":  "Stan Lee"  
                  }
              ]
}
"@  

$json = $string | ConvertFrom-Json
$json | Add-Member -MemberType NoteProperty -Name "Buch3" -Value @([pscustomobject]@{Titel="TitelXYZ"},[pscustomobject]@{Autor="Max Muster"})  
$json | ConvertTo-Json
Ergebnis:
{
    "Buch1":  [
                  {
                      "Titel":  "Spawn"
                  },
                  {
                      "Autor":  " Todd McFarlane"
                  }
              ],
    "Buch2":  [
                  {
                      "Titel":  "Spiderman"
                  },
                  {
                      "Autor":  "Stan Lee"
                  }
              ],
    "Buch3":  [
                  {
                      "Titel":  "TitelXYZ"
                  },
                  {
                      "Autor":  "Max Muster"
                  }
              ]
}
Grüße Uwe
Member: SunnyRainyDay
SunnyRainyDay Feb 26, 2018 at 11:22:32 (UTC)
Goto Top
Hallo Uwe,

vielen Dank! face-smile Das war´s und funktioniert blendendface-smile Da ich scheinbar an den richtigen geraten bin, wie würdest du das gleiche nur mit löschen und verändern von Arrays und deren Inhalten vorgehen? Da werkle ich schon schon ne Weile dran aber komme auch da nicht weiter.

Danke im Voraus

Jaro
Member: colinardo
colinardo Feb 26, 2018 updated at 11:34:49 (UTC)
Goto Top
Zitat von @SunnyRainyDay:
wie würdest du das gleiche nur mit löschen und verändern von Arrays und deren Inhalten vorgehen? Da werkle ich schon schon ne Weile dran aber komme auch da nicht weiter.
Ganze Bücher so
$json.PSObject.Members.Remove("Buch2")  
Einzelne Subobjects in den Arrays
$json.Buch2.PSObject.Members.Remove("Titel")  
usw.
Member: SunnyRainyDay
SunnyRainyDay Feb 26, 2018 at 12:20:12 (UTC)
Goto Top
Danke face-smile

geht das löschen auch ohne Index? Gibt es auch eine Möglichkeit nur mit dem Keynamen zu löschen?
Beispiel
$json.Buch2.PSObject.Members.Remove("Autor")  
funktioniert leider nicht.
Danke nochmals.
Member: colinardo
colinardo Feb 26, 2018 updated at 13:40:51 (UTC)
Goto Top
Klar, ist ja immer ein Array, also Foreach-Schleife dazwischen schalten.
$json.Buch2 | %{$_.PSObject.Members.Remove("Autor")}  
Member: SunnyRainyDay
SunnyRainyDay Feb 27, 2018 at 10:03:46 (UTC)
Goto Top
Vielen Dank nochmal face-smile Hab noch viel zu lernen.