Разобрать JSON в Powershell

У меня есть файл json, который имеет содержимое ниже. Я хочу перебирать каждый элемент (используя цикл foreach) в Powershell. Как мне это сделать?

{
  "abc": {
    "isSecret": null,
    "value": "'167401'"
  },
  "dar": {
    "isSecret": null,
    "value": "8980"
  },
  "hgt": {
    "isSecret": null,
    "value": "893240"
  },
  "newvar1": {
    "isSecret": null,
    "value": "newvalue1"
  },
  "var": {
    "isSecret": null,
    "value": "1230"
  }
}

какую версию powershell вы используете?

TZHX 24.11.2022 16:51

Версия PS: 5.1.19041.1682

Sourav Karmakar 24.11.2022 16:53
ConvertFrom-Json.
Abraham Zinala 24.11.2022 17:00

Powershell 7 имеет пары «имя-значение» с convertfrom-json -AsHashtable

js2010 24.11.2022 17:41
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
0
4
53
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

Вы можете сделать что-то вроде:

$input = @'
<your input here>
'@

$json = $input | ConvertFrom-Json

foreach($item in $json.PSObject.Properties)
{
    Write-Output $item.Name 
    Write-Output $item.Value.isSecret
    Write-Output $item.Value.value
}

с вашим вкладом это дает мне:

abc
'167401'
dar
8980
hgt
893240
newvar1
newvalue1
var
1230

поскольку все ваши значения isSecret равны нулю, они не отображают никакого контента.

Я хочу получить «.isSecret» и «.value» для каждого элемента. Там в любом случае ?

Sourav Karmakar 24.11.2022 17:12

Я отклонил этот ответ, потому что он создает иллюзию повторения элементов корневого объекта, но на самом деле это не так.

Mathias R. Jessen 24.11.2022 17:20

@MathiasR.Jessen, честно говоря, я только что понял, что ввод представляет собой объект, а не список. будет обновляться.

TZHX 24.11.2022 17:25

Во всяком случае, ваш ответ удовлетворяет моим требованиям. Большое спасибо @TZHX.

Sourav Karmakar 24.11.2022 17:42
$Data = $Json |ConvertFrom-Json
$Data.PSObject.Properties.Value

isSecret value
-------- -----
         '167401'
         8980
         893240
         newvalue1
         1230

Чтобы перебрать значения:

$Data.PSObject.Properties.Value.ForEach{
    Write-Host 'isSecret:' $_.isSecret
    Write-Host 'Value:' $_.Value
}

Версия Powershell 7 с парами имя, значение:

cat file.json | convertfrom-json -AsHashtable

Name                           Value
----                           -----
hgt                            {isSecret, value}
newvar1                        {isSecret, value}
dar                            {isSecret, value}
abc                            {isSecret, value}
var                            {isSecret, value}

Другие вопросы по теме