2015-07-14 1 views
0

Как бы вы разделили следующую переменную json на отдельные элементы массива?Разбить переменную json на отдельные элементы в массивах

[ 
    { 
     "server":{ 
     "name":"myUbuntuServer1", 
     "imageRef":"3afe97b2-26dc-49c5-a2cc-a2fc8d80c001", 
     "flavorRef":"6" 
     } 
    }, 
    { 
     "server":{ 
     "name":"myUbuntuServer2", 
     "imageRef":"3afe97b2-26dc-49c5-a2cc-a2fc8d80c001", 
     "flavorRef":"6" 
     } 
    }, 
    { 
     "server":{ 
     "name":"myUbuntuServer3", 
     "imageRef":"3afe97b2-26dc-49c5-a2cc-a2fc8d80c001", 
     "flavorRef":"6" 
     } 
    } 
] 

Например, выше будет перевести в массив, со следующими пунктами:

массив-элемент 0

{ 
     "server":{ 
     "name":"myUbuntuServer1", 
     "imageRef":"3afe97b2-26dc-49c5-a2cc-a2fc8d80c001", 
     "flavorRef":"6" 
     } 
    } 

Массив-пункт 1

{ 
     "server":{ 
     "name":"myUbuntuServer2", 
     "imageRef":"3afe97b2-26dc-49c5-a2cc-a2fc8d80c001", 
     "flavorRef":"6" 
     } 
    } 

Массив -item 2

{ 
     "server":{ 
     "name":"myUbuntuServer3", 
     "imageRef":"3afe97b2-26dc-49c5-a2cc-a2fc8d80c001", 
     "flavorRef":"6" 
     } 
    } 

Я хотел бы сделать это в Powershell 2.0 и получить доступ к каждому из них по отдельности. До сих пор это то, что мне удалось достичь:

$jsonarr = @() 
$arr = (Get-Content C:\json.json| Out-String).replace("[","") -split "(})," -replace "]","" 
$jsonarr += $arr[0..1] -join "" 
$jsonarr += $arr[2..3] -join "" 
$jsonarr += $arr[4] 

Однако это крайне негибким, и перестанет работать в ту же минуту я была подробно другого сервера в файл JSON.

+0

Ваша переменная * * уже ** массив с тремя элементами. –

+0

Как я могу получить доступ к каждому из них индивидуально? – methuselah

+0

Я обновил вопрос с дополнительной информацией, надеюсь, это обеспечивает больше контекста. – methuselah

ответ

1

для PowerShell v2 можно использовать Convert between PowerShell and JSON

PS

PowerShell v3 +, должны быть такими же, с помощью инструмента выше:

$json = '[ 
    { 
     "server":{ 
     "name":"myUbuntuServer1", 
     "imageRef":"3afe97b2-26dc-49c5-a2cc-a2fc8d80c001", 
     "flavorRef":"6" 
     } 
    }, 
    { 
     "server":{ 
     "name":"myUbuntuServer2", 
     "imageRef":"3afe97b2-26dc-49c5-a2cc-a2fc8d80c001", 
     "flavorRef":"6" 
     } 
    }, 
    { 
     "server":{ 
     "name":"myUbuntuServer3", 
     "imageRef":"3afe97b2-26dc-49c5-a2cc-a2fc8d80c001", 
     "flavorRef":"6" 
     } 
    } 
]' 

$servers = ConvertFrom-Json $json 

$servers.server.imageRef 

возвращается

3afe97b2-26dc-49c5-a2cc-a2fc8d80c001 
3afe97b2-26dc-49c5-a2cc-a2fc8d80c001 
3afe97b2-26dc-49c5-a2cc-a2fc8d80c001 

Кроме того, дон 't забыть «Get-Member»

PPS

PS C:\Users\joshua\Desktop> $servers.server| where name -EQ myUbuntuServer2 

name   imageRef        flavorRef 
----   --------        --------- 
myUbuntuServer2 3afe97b2-26dc-49c5-a2cc-a2fc8d80c001 6   



PS C:\Users\joshua\Desktop> $servers.server| where name -EQ myUbuntuServer2 | select -Property flavorRef 

flavorRef 
--------- 
6 

PPPS

также

конечно
$servers.server[0] 

вы должны быть в состоянии индекса по имени также, но я делаю некоторые глупые ошибки атм

+0

Привет, спасибо за ответ, но это не то, что я собираюсь сделать. Пожалуйста, взгляните на мой обновленный вопрос, поскольку он предоставляет дополнительную информацию. – methuselah

+0

надеюсь, что это поможет. если это то, что вы ищете Я могу попытаться написать немного более значимый текст через час или два –

Смежные вопросы