首页 > 解决方案 > PowerShell:如果值为空或为空,则在创建哈希表时跳过名称/值对

问题描述

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

我正在努力为 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":  "first name"
                        },
                        {
                            "value":  "third value",
                            "name":  "third name"
                        }
                    ]
}

不存在空项(如果值为 null 或为空)。

有任何想法吗?

非常感谢任何帮助!

提前致谢!

亲切的问候巴巴

标签: arrayspowershellhashtableskipisnullorempty

解决方案


删除语句$()周围的显式子表达式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

推荐阅读