遍历 $json 变量并获取每个 id 以添加到数组
Looping through $json variable and grabbing each id to add to an array
鉴于我正在处理以下 $json
变量,我将如何获取每个服务器 ID(即本例中的 215d1109-216d-48c3-af8e-998bb9bc3ca0
和 440cf918-3ee0-4143-b289-f63e1d2000e6
)并将其放入数组中?
现在 $obj.servers.id
returns 什么都没有(如预期的那样),但是 $obj.servers.id[0]
returns 一条错误消息。
clear
[System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions") | out-null
$json = '
{
"servers": [
{
"admin_password": "qpYU66rKxmnK",
"id": "215d1109-216d-48c3-af8e-998bb9bc3ca0",
"links": [
{
"href": "http://openstack.example.com/v3/servers/<id>",
"rel": "self"
},
{
"href": "http://openstack.example.com/servers/<id>",
"rel": "bookmark"
}
]
},
{
"admin_password": "wfksH3GTTseP",
"id": "440cf918-3ee0-4143-b289-f63e1d2000e6",
"links": [
{
"href": "http://openstack.example.com/v3/servers/<id>",
"rel": "self"
},
{
"href": "http://openstack.example.com/servers/<id>",
"rel": "bookmark"
}
]
}
]
}
'
$ser = New-Object System.Web.Script.Serialization.JavaScriptSerializer
$obj = $ser.DeserializeObject($json)
$obj.servers.id;
请注意,我使用的是 Powershell 2.0。
您误解了数据的结构。 $obj.servers
是一个有两个字段的数组,每个字段包含一个字典,而不是包含数组id
的对象。您需要像这样进行索引访问:
$obj.servers[0].id
$obj.servers.id[0]
肯定会报错,因为数组对象$obj.servers
没有属性id
,所以在PowerShell v2中$obj.servers.id
returns $null
,对空数组的索引访问失败(如您所料)。
示范:
PS C:\> <b>[void][Reflection.Assembly]::LoadWithPartialName('System.Web.Extensions')</b>
$json = @'
...
'@
PS C:\> <b>$ser = 新对象 Web.Script.Serialization.JavaScriptSerializer</b>
PS C:\> <b>$obj = $ser.DeserializeObject($json)</b>
PS C:\> <b>$obj.servers.GetType().FullName</b>
System.Object[]
PS C:\> <b>$obj.servers.id -eq $null</b>
真的
PS C:\> <b>$obj.servers[0].GetType().Name</b>
词典`2
PS C:\> <b>$obj.servers[0] |格式-Table -AutoSize</b>
核心价值
--- -----
admin_passwordqpYU66rKxmnK
编号 215d1109-216d-48c3-af8e-998bb9bc3ca0
链接 {System.Collections.Generic.Dictionary`2[System.Str...
PS C:\> <b>$obj.servers[0].id</b>
215d1109-216d-48c3-af8e-998bb9bc3ca0
要提取所有 ID,只需将数组通过管道传输到 ForEach-Object
循环中,在循环中回显 id
属性:
PS C:\> <b>$ids = $obj.servers | % { $_.id }</b>
PS C:\> <b>$ids</b>
215d1109-216d-48c3-af8e-998bb9bc3ca0
440cf918-3ee0-4143-b289-f63e1d2000e6
鉴于我正在处理以下 $json
变量,我将如何获取每个服务器 ID(即本例中的 215d1109-216d-48c3-af8e-998bb9bc3ca0
和 440cf918-3ee0-4143-b289-f63e1d2000e6
)并将其放入数组中?
现在 $obj.servers.id
returns 什么都没有(如预期的那样),但是 $obj.servers.id[0]
returns 一条错误消息。
clear
[System.Reflection.Assembly]::LoadWithPartialName("System.Web.Extensions") | out-null
$json = '
{
"servers": [
{
"admin_password": "qpYU66rKxmnK",
"id": "215d1109-216d-48c3-af8e-998bb9bc3ca0",
"links": [
{
"href": "http://openstack.example.com/v3/servers/<id>",
"rel": "self"
},
{
"href": "http://openstack.example.com/servers/<id>",
"rel": "bookmark"
}
]
},
{
"admin_password": "wfksH3GTTseP",
"id": "440cf918-3ee0-4143-b289-f63e1d2000e6",
"links": [
{
"href": "http://openstack.example.com/v3/servers/<id>",
"rel": "self"
},
{
"href": "http://openstack.example.com/servers/<id>",
"rel": "bookmark"
}
]
}
]
}
'
$ser = New-Object System.Web.Script.Serialization.JavaScriptSerializer
$obj = $ser.DeserializeObject($json)
$obj.servers.id;
请注意,我使用的是 Powershell 2.0。
您误解了数据的结构。 $obj.servers
是一个有两个字段的数组,每个字段包含一个字典,而不是包含数组id
的对象。您需要像这样进行索引访问:
$obj.servers[0].id
$obj.servers.id[0]
肯定会报错,因为数组对象$obj.servers
没有属性id
,所以在PowerShell v2中$obj.servers.id
returns $null
,对空数组的索引访问失败(如您所料)。
示范:
PS C:\> <b>[void][Reflection.Assembly]::LoadWithPartialName('System.Web.Extensions')</b>
$json = @'
...
'@
PS C:\> <b>$ser = 新对象 Web.Script.Serialization.JavaScriptSerializer</b>
PS C:\> <b>$obj = $ser.DeserializeObject($json)</b>
PS C:\> <b>$obj.servers.GetType().FullName</b>
System.Object[]
PS C:\> <b>$obj.servers.id -eq $null</b>
真的
PS C:\> <b>$obj.servers[0].GetType().Name</b>
词典`2
PS C:\> <b>$obj.servers[0] |格式-Table -AutoSize</b>
核心价值
--- -----
admin_passwordqpYU66rKxmnK
编号 215d1109-216d-48c3-af8e-998bb9bc3ca0
链接 {System.Collections.Generic.Dictionary`2[System.Str...
PS C:\> <b>$obj.servers[0].id</b>
215d1109-216d-48c3-af8e-998bb9bc3ca0
要提取所有 ID,只需将数组通过管道传输到 ForEach-Object
循环中,在循环中回显 id
属性:
PS C:\> <b>$ids = $obj.servers | % { $_.id }</b>
PS C:\> <b>$ids</b>
215d1109-216d-48c3-af8e-998bb9bc3ca0
440cf918-3ee0-4143-b289-f63e1d2000e6