PowerShell: пропустить пару имя / значение при создании хэш-таблицы, если значение равно null или пусто

Всем привет и прежде всего: спасибо, что прочитали мой вопрос!

Я изо всех сил пытаюсь создать вложенную хеш-таблицу для последующего convertto-json-object для 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-Array есть пустой элемент, создание которого я бы хотел пропустить - если значение равно нулю или пусто ...

Кажется, что какая-то часть If-Case работает, потому что этот элемент в некотором смысле пуст ... но он существует, и я не хочу этого. : /

Мой предпочтительный результат должен выглядеть так:

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

При отсутствии пустого элемента (если значение равно нулю или пусто).

Любые идеи?

Любая помощь высоко ценится!

Заранее спасибо!

С уважением, БаБа


person BaBa    schedule 10.09.2020    source источник


Ответы (1)


Удалите явное подвыражение $(), окружающее оператор 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
person Mathias R. Jessen    schedule 10.09.2020
comment
Вот это да. Это было потрясающе быстро и абсолютно правильно! Большое вам спасибо, сэр! - person BaBa; 10.09.2020