PowerShell:如果值为 null 或为空,则在创建哈希表时跳过 name/value-pair

PowerShell: Skip name/value-pair while creating hashtable if value is null or empty

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

我正在为稍后的 convertto-json-Invoke-RestMethod 对象创建一个嵌套哈希表。

我目前的简化代码是:

@{
  "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”数组中有一个空项,我想跳过创建它的过程 - 如果值为 null 或空...

If-Case 的某些部分似乎有效,因为该项目在某种程度上是空的...但它确实存在,我不希望它存在。 :/

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

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

没有空项目(如果值为 null 或空)。

有什么想法吗?

非常感谢任何帮助!

提前致谢!

亲切的问候 吧吧

删除 if 语句周围的显式子表达式 $(),然后删除 , 数组运算符 - 周围的 array-expression 运算符 @() 将采用无论如何都要把整个东西变成一个数组:

@{
  "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