Преобразование pscustomobject в формат Json - PullRequest
1 голос
/ 09 мая 2019

У меня есть пример формата Json, который я сейчас пытаюсь закодировать с помощью powershell и преобразовать его в формат Json с помощью PScustomobject, однако мне трудно, так как число DBdetails будет зависеть от массива, который я получаю. Что не так с моей логикой?

$dbcountall = 1
foreach ($alldblist in $dblist)
{  
if($dbcountall -eq 1)
{
    $name = $alldblist.name
    $dbdetailsname = "DBDetails" + $dbcountall
    $dbpiece = [pscustomobject]@{ 
    SourceType = "$name"
    TargetType = "$name"
    }
    $alldb += [pscustomobject]@{ 
    DataBasesCount = $dblist.count
    $dbdetailsname = $dbpiece
    }
}
else
{
    $name = $alldblist.name
    $dbdetailsname = "DBDetails" + $dbcountall
        $dbpiece = [pscustomobject]@{ 
        SourceType = "$name"
        TargetType = "$name"
        }
    $alldb += [pscustomobject]@{ 
    $dbdetailsname = $dbpiece
    }
}
$dbcountall++
}

##Output is
"Databases":  [
                                   {
                                       "DatabasesCount":  "4",
                                       "DBDetails1":  {
                                                          "Source":  "SampleDB1",
                                                          "Target":  "SampleDB1"
                                                      }
                                   },
                                   {
                                       "DBDetails2":  {
                                                          "Source":  "SampleDB2",
                                                          "Target":  "SampleDB2"
                                                      }
                                   },
                                   {
                                       "DBDetails3":  {
                                                          "Source":  "testdatabase",
                                                          "Target":  "testdatabase"
                                                      }
                                   },
                                   {
                                       "DBDetails4":  {
                                                          "Source":  "Testdatabase_backup_10GB",
                                                          "Target":  "Testdatabase_backup_10GB"
                                                      }
                                   }
                               ],

Результат должен выглядеть так и сверху, с дополнительным брекетингом.

"Databases": [
     {
      "DatabasesCount": "3",
      "DBDetails1": {
        "Source": "db1",
        "Target": "db1"
      },
      "DBDetails2": {
        "Source": "db2",
        "Target": "db2"
      },
      "DBDetails3": {
        "Source": "db3",
        "Target": "db3"
      }

    }
  ],

1 Ответ

2 голосов
/ 09 мая 2019

Вместо создания одного объекта на базу данных, создайте один объект, затем добавьте свойства для каждой базы данных.

$DatabaseInfo = [pscustomobject]@{
    DatabasesCount = $dblist.count
}
For($i=1;$i -le $dblist.count;$i++){
    $DBObject = [pscustomobject]@{
        Source = $dblist[$i-1].Name
        Target = $dblist[$i-1].Name
    }
    $DatabaseInfo | Add-Member "DBDetails$i" $DBObject
}
...