Hi, hab eine Frage vielleicht hat jemand eine Idee.
Ich lese zwei JSON files ein und würde gerne die Informationen in ein PSCustomObject zusammenführen allerdings sollen immer nur die einzelnen werte verändert werden falls die Information schon vorhanden ist .
$Json ist dabei eine globale Information und die Werte von $Json2 haben das letzte Wort sollte es zu gleichen Key/Value pairs kommen.
Die Information aus der $Json2 ist also führend, soll aber nur Informationen überschreiben oder anreichern.
Beispiel der JSONs.
$Json1:
{
"Hostname": "Server1",
"Port": ""5001",
"Pfade":{
"Pfad1": "C:\\test\123",
"Pfad2": "C:\\test\456"
"Pfad3": "C:\\test\456"
"Pfad4": "C:\\test\456"
}
}
$Json2:
{
"Hostname": "Server2",
"Port": ""5001",
"Pfade":{
"Pfad1": "E:\\Prod\123",
"Pfad2": "E:\\Prod\456"
}
}
Ich lese die beiden Dateien und konvertiere mittels ConvertFrom-Json
Die Informationen stehen jetzt also in den Variablen $Json1 und $Json2
Ich merge die beiden variablen nun zu einem Objekt.
$Object = [ordered] @{}
foreach ($Property in $Json1.PSObject.Properties) {
$Object += @{$Property.Name = $Property.Value}
}
foreach ($Property in $JSON2.PSObject.Properties) {
try{
$Object += @{$Property.Name = $Property.Value}
}catch{
$Object.$($Property.Name) = $Property.Value
}
}
}
Das Ergebnis des neu erstellten Objektes sollte wie folgt aussehen:
"Hostname": "Server2"
"Port": ""5001",
"Pfade":@{
"Pfad1": "E:\\Prod\123"
"Pfad2": "E:\\Prod\456"
"Pfad3": "C:\\test\456"
"Pfad4": "C:\\test\456"}
Was aber rauskommt ist:
"Hostname": "Server2"
"Port": ""5001",
"Pfade":@{
"Pfad1": "E:\\Prod\123"
"Pfad2": "E:\\Prod\456"
}
Der Hostname aus der JSON2 wurde übernommen und der port blieb wie gewünscht unverändert.
Nur die werte des Pfad1 und Pfad2 wurden mit den informationen der JSON2 verändert, PFad3 und pfad4 aber gelöscht.
Der Code oben löscht mir aber genau diese Informationen Pfad3 und pfad4. Alles andere wird einwandfrei ersetzt.
ich habe also Probleme nur die Verschachtelten Werte anzupassen. Alles auf erster Ebene funktioniert, sobald aber eine weitere Ebene hinzukommt, Pfad-> Pfad1 wird die Information von Pfad komplett ersetzt.
Das ist im code ziemlich klar, allerdings hab ich nicht wirklich die Idee wie ich das Problem lösen könnte und nur die Infos von Pfad1 und 2 anpasse aber nicht Pfad3 und 4($json1) lösche.
Ergebnis sollte so aussehen.
Das Ergebnis des neu erstellten Objektes sollte wie folgt aussehen:
"Hostname": "Server2"
"Port": ""5001",
"Pfade":@{
"Pfad1": "E:\\Prod\123"
"Pfad2": "E:\\Prod\456"
"Pfad3": "C:\\test\456"
"Pfad4": "C:\\test\456"}
jemand ne Idee?
Vielen dank und beste grüße