在Powershell中查看json数据

时间:2016-08-26 14:40:04

标签: json powershell

我有一个如下所示的JSON文件:

$jsondata = '{
    "ips":  {
                "10.20.30.40":  [
                                       {
                                           "rhost":  "DNS Name1.",
                                           "rdata":  [
                                                         "10.20.30.40"
                                                     ],
                                           "rrtype":  "A (1)",
                                           "ttl":  86400,
                                           "geo":  null,
                                           "source":  "DNSProvider1"
                                       }
                                   ],
                "40.50.60.70":  [
                                       {
                                           "rhost":  "DNS Name2.",
                                           "rdata":  [
                                                         "40.50.60.70"
                                                     ],
                                           "rrtype":  "A (1)",
                                           "ttl":  86400,
                                           "geo":  null,
                                           "source":  "DNSProvider1"
                                       }
                                   ]
            }
}'

我想获取列表中每个IP地址的所有TTL(例如)。

我将此JSON转换为Powershell PSCustomObject:

$obj = $jsondata | convertFrom-Json

现在我想获得所有TTL,我试图获取IP列表(作为开始):

foreach ($ip in $a.ips) {write-host $ip }

我没有得到字符串,这就是为什么我(可能)不能进入并获得TTL的原因。

所以我的问题是:如何将所有IP作为字符串?

我相信,一旦我得到了答案,我就会明白如何查看列表中的所有IP。

谢谢!

2 个答案:

答案 0 :(得分:2)

foreach($ip in $obj.ips | Get-Member -MemberType NoteProperty)
{
    Write-Host -Verbose ("IP Address {0} has TTL {1}" -f $ip.Name, $obj.ips."$($ip.Name)".ttl)
}

Get-Member将获取属性的名称(即IP地址),而不是值。

答案 1 :(得分:1)

谢谢Rubanov,这确实有帮助!

只是为了记录整个答案:

    foreach($ip in $obj.ips | Get-Member -MemberType NoteProperty)
        {
             Write-Host -Verbose $obj.ips.$($ip.Name).ttl
        }

或者:

($obj.ips | Get-Member -MemberType NoteProperty).Name | % {$obj.ips.$_.ttl}