Я пытаюсь перебрать некоторые JSON, когда точная структура неизвестна.
Это JSON выглядит так:
"object" : {
"Item1" : {
"property1" : "a"
"property2" : "b"
}
}
"Item2" : {
"property1" : "c"
"property2" : "d"
}
}
}
Проблема в том, что я не знаю, каким будет настоящее имя Item1 или Item2. Это строка буквенно-цифровых символов c, которая различается для каждого вызова.
Я пробовал
$json_response = $response.object
foreach($item in $json_response) {
$id = $item.property1
Write-Host $id
}
Однако значение $ id никогда не устанавливается равным значению proprty1. Write-Host всегда выводит пустую строку.
Если я просто сделаю
Write-Host $json_response
, я получу что-то вроде
@{Item1=; item2=}
Я подумал, что это может быть таблица ha sh, которая позволит мне перебирать его с помощью ключей, но нет свойства Keys.
Может кто поможет?
Обновление: ответ Lee_Dailey продвинул меня дальше, но все еще не могу получить доступ к свойствам. С помощью Lee_Dailey я придумал следующее:
foreach ($item in $response_json.PSobject.Properties) {
$json2 = $item | ConvertTo-Json
Write-Host $json2
}
Это создает следующее JSON
{
"Value": {
"property1": "a",
"property2": "b"
}
}
Однако я все еще не могу получить доступ к property1. Выполнение
$id = json2.Value.property1
Write-Host $id
приводит к пустому значению. Как мне получить доступ к свойствам в JSON в переменной $ json2?
Обновление 2. Думаю, у меня все заработало, но не знаю, правильно это или хак. Обновление приведенного выше кода до
$json2 = $item | ConvertTo-Json | ConvertFrom-Json
Кажется, позволяет мне сделать
$id = $json2.Value.property1
Я не уверен, откуда взялось «Value». Это не часть ответа HTTP. Также кажется странным преобразовать в JSON, а затем преобразовать его обратно, однако это, похоже, раскрывает свойства.