[Powershell] Mit JSON arbeiten

Overkee

Lieutenant
Registriert
Okt. 2015
Beiträge
959
Ich habe ein Problem mit Powershell und JSON.

Inzwischen habe ich es geschafft per Webrequest auf die JSON zuzugreifen, aber wie arbeite ich jetzt damit?

Code:
$j = Invoke-WebRequest -Uri https://himawari8-dl.nict.go.jp/himawari8/img/D531107/latest.json | ConvertFrom-Json
Write-Output $j

Code:
{"date":"2017-07-11 12:12:30","file":"PI_H08_20170711_1210_TRC_JP02_R10_PLLJP.png"}

Vom Inhalt der JSON interessiert mich eigentlich auch nur die Uhrzeit (Stunden und Minuten).

Ich habe leider erst einmal mit JSON gearbeitet und das war in Python.

Wie kann ich mir die Uhrzeit in einen string auslesen?
 
Dafür gibts die Cmdlets ConvertTo- und ConvertFrom-Json.
 
JSON ist eine Objektbeschreibung. Das Objekt, das zu zurückbekommst, hat zwei Attribute.
1. Das Attribut "date" mit einem String im Timestamp Format als Wert
2. Das Attribut "file" mit einem String der einen Dateinamen repräsentiert.

Man bastele sich nun ein Wrapperobjekt, das dem JSON entspricht und greife über entsprechende getter auf das Attribut "date" zu.

Nun mittels passender Methode aus dem String einen Timestamp machen, und schon hast Du ein Zeitobjekt in der Hand, das Du nach Jahr, Monat, Urzeit usw. fragen kannst.
 
Hier mal eine kleine Vorlage für dich:

Code:
$j = Invoke-WebRequest -Uri https://himawari8-dl.nict.go.jp/himawari8/img/D531107/latest.json | ConvertFrom-Json 

$IFormatProvider = [System.Globalization.CultureInfo]::InvariantCulture 
$DateTimeInputFormat = 'yyyy\-MM\-dd HH\:mm\:ss' 
$DateTimeStyle = [System.Globalization.DateTimeStyles]::None 

$ParserOutputDate = New-object datetime 
$dateParser = { 
	$Result = [datetime]::TryParseExact($ParserInputDate , $DateTimeInputFormat , $IFormatProvider , $DateTimeStyle ,[ref] $ParserOutputDate) 
} 

$ParserInputDate = $j.date 
. $dateParser 
$j.date = $ParserOutputDate 

"{0:HH\:mm} Uhr" -f $j.date
 
Zuletzt bearbeitet:
Danke für eure Hilfe. Auf Basis vom Code von DPXone hatte ich eine gute Grundlage und wusste was ich mir genauer ansehen kann. Meine Lösung sieht jetzt so aus:

Code:
$date = Invoke-WebRequest -Uri https://himawari8-dl.nict.go.jp/himawari8/img/D531107/latest.json | ConvertFrom-Json | Select date
$date = $date[0].date
$date = [DateTime]::ParseExact($date, 'yyyy-MM-dd HH:mm:ss', $null)

$hour = $date.Hour.ToString("00")
$minute = [Math]::Floor($date.Minute / 10).ToString("0")

Vielen Dank nochmal an alle die geholfen haben :)
 
Zurück
Oben