[FIXED] Powershell – Fügen Sie einem JSON mit mehreren Abschnitten ein weiteres Objekt hinzu?

Ausgabe

Ich extrahiere ein JSON aus einer Datei mit der folgenden Syntax:

$json = Get-Content $jsonfile | Out-String | ConvertFrom-Json

So sieht mein JSON derzeit aus:

{
    "Server":  {
                   "CustomModules":  [
                                         "@{Name=Test Server Module 1; Tag=Server; Action=Option I want; Image_Path=C:Temp; Admin_Only=false}",
                                         "@{Name=Test Server Module 2; Tag=Server; Action=Option I want; Image_Path=C:Temp/Downloads; Admin_Only=false}"
                                     ]
               },
    "Help Desk":  {
                      "CustomModules":  [
                                            "@{Name=Test Help Desk Module 1; Tag=HD; Action=Option I want; Image_Path=C:Temp; Admin_Only=false}",
                                            "@{Name=Test Help Desk Module 2; Tag=HD; Action=Option I want; Image_Path=C:Temp/Downloads; Admin_Only=true}"
                                        ]
                  }
}

Wie würde ich einen weiteren Satz von Werten unter den „CustomModules“ des Servers hinzufügen, damit es so aussieht?

    "Server":  {
                   "CustomModules":  [
                                         "@{Name=Test Server Module 1; Tag=Server; Action=Option I want; Image_Path=C:Temp; Admin_Only=false}",
                                         "@{Name=Test Server Module 2; Tag=Server; Action=Option I want; Image_Path=C:Temp/Downloads; Admin_Only=false}",
                                         "@{Name=Test Server Module 3; Tag=Server; Action=Option I want; Image_Path=C:/User/TestUser; Admin_Only=true}"
                                     ]
               },
    "Help Desk":  {
                      "CustomModules":  [
                                            "@{Name=Test Help Desk Module 1; Tag=HD; Action=Option I want; Image_Path=C:Temp; Admin_Only=false}",
                                            "@{Name=Test Help Desk Module 2; Tag=HD; Action=Option I want; Image_Path=C:Temp/Downloads; Admin_Only=true}"
                                        ]
                  }
}

Ich habe Add-Member ausprobiert, aber es fügt nur die bereits vorhandenen aktuellen Werte hinzu.

Lösung

Sie können Objekte an das Array CustomModulesarray anhängen, indem Sie dies als Beispiel verwenden:

$json = Get-Content path\to\json.json -Raw | ConvertFrom-Json
$json.Server.CustomModules = @(
    $json.Server.CustomModules
    ([pscustomobject]@{
        Name       = 'Test Server Module 3'
        Tag        = 'Server'
        Action     = 'Option I want'
        Image_Path = 'C:/User/TestUser'
        Admin_Only = $true
    })
)
$json | ConvertTo-Json

Wie in den Kommentaren empfohlen, verfügen Ihre Arrays jedoch derzeit über Zeichenfolgendarstellungen von PowerShell-Objekten, die höchstwahrscheinlich aufgrund der Serialisierung die Standardtiefe von 2 überschritten haben . Um dies zu vermeiden, da Sie sie später analysieren müssen , verwenden Sie ConvertTo-Json -Depth 99beim Exportieren des ursprünglichen Json.


Beantwortet von –
Santiago Squarzon


Antwort geprüft von –
Pedro (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like

[FIXED] So entfernen Sie leere Objekt-Tags

Ausgabe Angesichts des folgenden JSON: { "identifers": { "_id": "f073895e207c3157", "attrsDigest": "-706912700", "entityTypes": [ { "_id": "bacf9e903a6c5def", "attrsDigest":…