Требуется помощь JSON в PowerShell - PullRequest
0 голосов
/ 12 июня 2018

Я пытаюсь получить некоторые обменные курсы через API, но я не знаю, как преобразовать все это в одну таблицу, например:

date | timestamp | base | Currency Name | Currency |

Мне нужны курсы для расширения в два столбца Название валюты и Валюта?

$request = website
$X = Invoke-WebRequest $request
$JSONResult = $x | ConvertFrom-Json
$JSONResult
{
    "success": true,
    "timestamp": 1519296206,
    "base": "EUR",
    "date": "2018-06-12",
    "rates": {
        "AUD": 1.566015,
        "CAD": 1.560132,
        "CHF": 1.154727,
        "CNY": 7.827874,
        "GBP": 0.882047,
        "JPY": 132.360679,
        "USD": 1.23396,
        [...]
    }
}  

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Исходя из:

> $JSONResult

success   : True
timestamp : 1519296206
base      : EUR
date      : 2018-06-12
rates     : @{AUD=1,566015; CAD=1,560132; CHF=1,154727; CNY=7,827874; GBP=0,882047; JPY=132,360679; USD=1,23396}

вы могли бы получить, как собрать его вместе:

$request = 'http://data.fixer.io/api/latest?access_key=hexkeydeletedhexkeydeletedhexkey'
$x= Invoke-WebRequest $request 
$JSONResult = $x | ConvertFrom-Json 
If ($JSONResult.success){ 
  $JSONResult.rates.PSObject.Properties | ForEach-Object { 
  New-Object -Type PSObject -Property @{ 
    'date' = $JSONResult.date 
    'timestamp' = $JSONResult.timestamp 
    'base' = $JSONResult.base 
    'Currency Name' = $_.Name 
    'Currency' = $_.Value } 
  } | select date,timestamp,base,'Currency Name',Currency|ft -auto 
}

Пример вывода:

date        timestamp base Currency Name   Currency
----        --------- ---- -------------   --------
2018-06-12 1519296206 EUR  AUD             1,566015
2018-06-12 1519296206 EUR  CAD             1,560132
2018-06-12 1519296206 EUR  CHF             1,154727
2018-06-12 1519296206 EUR  CNY             7,827874
2018-06-12 1519296206 EUR  GBP             0,882047
2018-06-12 1519296206 EUR  JPY           132,360679
2018-06-12 1519296206 EUR  USD              1,23396

Чтобы преобразовать метку времени из формата даты и времени Unix в местное время, вы можете использовать эту функцию

Function Convert-FromUnixDate ($UnixDate) {
   [timezone]::CurrentTimeZone.ToLocalTime(([datetime]'1/1/1970').AddSeconds($UnixDate))
}

> (Convert-FromUnixDate 1528900809):ToString('G')
2018-06-13 16:40:09
0 голосов
/ 12 июня 2018

После преобразования значение свойства rates ваших данных JSON является пользовательским объектом с именами валют в качестве свойств и обменными курсами (?) В качестве их значений.Используйте внутреннее свойство PSObject этого объекта для перечисления свойств объекта и их значений:

$JSONResult.rates.PSObject.Properties | ForEach-Object {
    New-Object -Type PSObject -Property @{
        'Date'          = $JSONResult.date
        ...
        'Currency Name' = $_.Name
        'Currency'      = $_.Value
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...