这一直困扰着我一段时间,特别是因为我过去已经解决了类似的问题但却无法找到任何参考。我想搜索特定属性的对象列表,属性是硬币名称:
$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中找到对象列表中的对象?
由于
史蒂夫
答案 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)