Powershell Objects迭代jSON

时间:2018-01-23 00:04:36

标签: json powershell

这一直困扰着我一段时间,特别是因为我过去已经解决了类似的问题但却无法找到任何参考。我想搜索特定属性的对象列表,属性是硬币名称:

$URL = "https://www.cryptocompare.com/api/data/coinlist/"
$WebRequest = Invoke-WebRequest $URL | ConvertFrom-Json
foreach ($coin in $WebRequest.Data)
{
$coin.FullName -match "Bitcoin (BTC)"
Write-Host "Found It!"
}

这是我的问题的简单版本,.data属性中的对象我似乎无法像往常一样枚举迭代? 有没有更好的方法在一些转换后的JSON中找到对象列表中的对象?

由于

史蒂夫

1 个答案:

答案 0 :(得分:2)

这是因为相对于您调用的内容没有.FullName属性。 实际上根本没有字段标题。

所以,你需要创建字段标题,不要使用.property并只是要求字符串。

数据集中的FullName只是一个字符串,其中包含Data属性数组中的其余数据。

$URL = "https://www.cryptocompare.com/api/data/coinlist/"
$WebRequest = Invoke-WebRequest $URL | ConvertFrom-Json

$WebRequest | Get-Member

   TypeName: System.Management.Automation.PSCustomObject

Name             MemberType   Definition                                                                                                                                       
----             ----------   ----------                                                                                                                                       
Equals           Method       bool Equals(System.Object obj)                                                                                                                   
GetHashCode      Method       int GetHashCode()                                                                                                                                
GetType          Method       type GetType()                                                                                                                                   
ToString         Method       string ToString()                                                                                                                                
BaseImageUrl     NoteProperty string BaseImageUrl=https://www.cryptocompare.com                                                                                                
BaseLinkUrl      NoteProperty string BaseLinkUrl=https://www.cryptocompare.com                                                                                                 
Data             NoteProperty System.Management.Automation.PSCustomObject Data=@{BTC=; LTC=; DASH=; XMR=; NXT=; ETC=; DOGE=; ZEC=; BTS=; DGB=; BTCD=; PPC=; CRAIG=; XBS=; XP...
DefaultWatchlist NoteProperty System.Management.Automation.PSCustomObject DefaultWatchlist=@{CoinIs=1182,7605,5038,24854,3807,3808,202330,5324,5031,20131; Sponsored=}         
Message          NoteProperty string Message=Coin list succesfully returned! This api is moving to https://min-api.cryptocompare.com/data/all/coinlist, please change the path.
Response         NoteProperty string Response=Success                                                                                                                          
Type             NoteProperty int Type=100    

所以,尝试这样的事情......

$TempFile = [System.IO.Path]::GetTempFileName()
Test-Path -Path $TempFile
$WebRequest.Data | Out-File $TempFile
# psedit $TempFile
$CoinReport = Import-Csv -Path $TempFile -Delimiter ':' -Header Coin,FullName
# $CoinReport | Format-Table -AutoSize -Wrap
$CoinReport | Select FullName | Where FullName -Like '*Bitcoin (BTC)*'

结果

True

FullName                                                                                                                                             
--------                                                                                                                                             
@{Id=1182; Url=/coins/btc/overview; ImageUrl=/media/19633/btc.png; Name=BTC; Symbol=BTC; CoinName=Bitcoin; FullName=Bitcoin (BTC); Algorithm=SHA256; 

或者再次查看之后,就这样做,因为您要查找的数据已经在数组中。

$WebRequest.Data | % {$_.BTC} | Format-Table -AutoSize -Wrap

Results


Id   Url                 ImageUrl             Name Symbol CoinName FullName      Algorithm ProofType FullyPremined
--   ---                 --------             ---- ------ -------- --------      --------- --------- -------------
1182 /coins/btc/overview /media/19633/btc.png BTC  BTC    Bitcoin  Bitcoin (BTC) SHA256    PoW       0   


$WebRequest.Data | % {$_.BTC.FullName} | Format-Table -AutoSize -Wrap

Results

Bitcoin (BTC)