PowerShell:如果值为null或为空,则在创建哈希表时跳过名称/值对

问题描述

大家好,首先:感谢您阅读我的问题!

我正在努力为后来的Invoke-RestMethod的convertto-json-object创建一个嵌套的哈希表。

目前,我的简化代码是:

@{
  "NameOfArray" = @(
    @{
      "name" = "first name"
      "value" = "first value"
    },$( If ( -Not [string]::IsNullOrEmpty($VariableThatMayBeNullOrEmpty) ) {
      @{
        "name"  = "second name"
        "value" = $VariableThatMayBeNullOrEmpty
      }
    } ),@{
      "name" = "third name"
      "value" = "third value"
    }
  )
} | ConvertTo-Json

这是输出

{
    "NameOfArray":  [
                        {
                            "value":  "first value","name":  "first name"
                        },{

                        },{
                            "value":  "third value","name":  "third name"
                        }
                    ]
}

“ NameOfArray” -Array中有一个空项目,如果该值为null或为空,我想跳过该项目...

If-Case的某些部分似乎正在工作,因为该项目在某种程度上是空的……但是它确实存在,我不希望这样做。 :/

我的首选输出应如下所示:

{
    "NameOfArray":  [
                        {
                            "value":  "first value","name":  "third name"
                        }
                    ]
}

缺少空项目(如果value为null或空)。

有什么想法吗?

我们非常感谢您的帮助!

谢谢!

亲切问候 BaBa

解决方法

删除$()语句周围的显式子表达式if,然后删除,数组运算符-周围的数组表达式运算符@()将负责将整个东西变成一个数组:

@{
  "NameOfArray" = @(
    @{
      "name" = "first name"
      "value" = "first value"
    } 
    if( -Not [string]::IsNullOrEmpty($VariableThatMayBeNullOrEmpty) ) {
      @{
        "name"  = "second name"
        "value" = $VariableThatMayBeNullOrEmpty
      }
    }
    @{
      "name" = "third name"
      "value" = "third value"
    }
  )
} | ConvertTo-Json