Чтобы удалить l oop внутри переменной, используя powershell - PullRequest
2 голосов
/ 22 марта 2020

enter image description here

Я вызвал-restmethod и сохранил вывод в переменной $ a и использовал convertTo- json, и я хочу удалить переменные и значения, которые не требуются. Я использовал $ a -replace "variable" -replace "value", но он не работает

1 Ответ

2 голосов
/ 22 марта 2020

Не пытайтесь манипулировать JSON как текстом (как строкой).

Проще и надежнее преобразовать _объекты ([pscustomobject] экземпляры), представляющие ввод JSON, что Invoke-RestMethod возвращает:

# Assume that $fromJson was obtained as follows:
#   $fromJson = Invoke-RestMethod ...

$fromJson.variables | ForEach-Object {
  # Replace the property values with the current value's .value property
  # value.
  foreach ($prop in $_.psobject.Properties) {
    $_.($prop.Name) = $prop.Value.value
  }
  $_  # Output the modified object.
} | ConvertTo-Json

$json.variables использует перечисление члена для возврата массива значений свойства variables и Команда ForEach-Object преобразует результирующие объекты, заменяя значения их свойств их значением свойства .value.

.psobject.Properties - способ отражения свойств любого объекта, а каждое свойство - Возвращенный информационный объект имеет свойство .Name и .Value.

ConvertTo-Json преобразует измененные объекты обратно в JSON

, учитывая следующий пример JSON вход:

[
  {
    "variables": {
      "appdata": {
        "value": "x1"
      },
      "appinsta": {
        "value": "y1"
      }      
    }   
  },
  {
    "variables": {
      "appdata": {
        "value": "x2"
      },
      "appinsta": {
        "value": "y2"
      }      
    }   
  }
]

вышеупомянутые выходы:

[
  {
    "appdata": "x1",
    "appinsta": "y1"
  },
  {
    "appdata": "x2",
    "appinsta": "y2"
  }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...