【问题标题】:Converting pscustomobject into Json format将 pscustomobject 转换为 Json 格式
【发布时间】:2019-09-26 19:04:11
【问题描述】:

我有示例 Json 格式,我目前正在尝试使用 powershell 进行编码,并使用 PScustomobject 将其转换为 Json 格式,但是我遇到了困难,因为 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"
      }

    }
  ],

【问题讨论】:

  • 您能否突出显示差异
  • $alldb 应该是一个具有多个属性的对象,而不是一个每个对象只有一个(或两个)属性的数组。

标签: powershell pscustomobject


【解决方案1】:

不是为每个数据库创建一个对象,而是创建一个对象,然后为每个数据库添加属性。

$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
}

【讨论】:

  • 我想只使用 if 语句而不知道这种方法。试过了,它奏效了。非常感谢!
猜你喜欢
  • 2021-02-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-26
  • 2011-07-04
  • 2018-03-06
  • 2014-07-25
相关资源
最近更新 更多