2016-08-12 8 views
-1

Ich habe eine Textdatei mit Zeilen wie:Convert String Json mit Powershell

TRACE 2016-06-23 08:47:54,803 {"x":"0.0000179000","l":"Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.34209)","a":"Get","p":"345","u":"dae824a6-144b-4135-a6fd-01584f06a27f","i":"10.0.2.166","s":"US","e":"start"} 

Es wird groß sein, wenn jemand helfen kann, wie es mit Powershell (Ich versuchte es mit ConvertTo-JSON JSON zu konvertieren, aber ohne Erfolg.)

+0

'ConvertTo-Json' ein beliebiges Objekt zu einem JSON-String, wie' ls serialisiert | ConvertTo-Json'. Wahrscheinlich möchten Sie 'ConvertFrom-Json', das eine JSON-Zeichenfolge in ein benutzerdefiniertes Objekt konvertiert. –

Antwort

0
# 'TRACE 2016-06-23 08:47:54,803 {"x":"0.0000179000","l":"Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.34209)","a":"GetUserStartedWatchingMedias","p":"195","u":"dae824a6-144b-4135-a6fd-01584f06a27f","i":"10.0.2.166","s":"EU-WS-A-5","e":"start"}' 

foreach ($row in (Get-Content -LiteralPath C:\TEMP\IIS_Logs\IIS_Logs.txt)) 
{ 
    if ($row -like '*}') 
    { 
     $Arr = $row -split ' ' ; 
     $Arr = $Arr -ne ' ' ; 

     $RecordDate = $Arr[1]+' '+$Arr[2]; 
     $Json = $row.Substring($row.IndexOf("{"),($row.IndexOf("}")-$row.IndexOf("{")+1)); 
     ConvertFrom-Json -InputObject $Json | ConvertTo-Csv -Delimiter "," -NoTypeInformation | Out-File 'C:\TEMP\IIS_Logs\test.txt' 
    }; 
}; 
3

Es ist nicht ganz klar, was Sie wollen. Wenn Sie eine gültige JSON-String wollen, dann entfernen Sie den ersten Teil des Strings (dieser Teil: TRACE 2016-06-23 08:47:54,803) und fertig:

$data = 'TRACE 2016-06-23 08:47:54,803 {"x":"0.0000179000","l":"Mozilla/4.0 (compatible; MSIE 6.0; MS Web Services Client Protocol 4.0.30319.34209)","a":"Get","p":"345","u":"dae824a6-144b-4135-a6fd-01584f06a27f","i":"10.0.2.166","s":"US","e":"start"}' 

$json = $data.Substring($data.IndexOf("{")) 

Wenn Sie es von JSON in ein Objekt konvertieren wollen dann noch Sie brauchen die Zeichenfolge in eine gültige JSON-Zeichenfolge zu konvertieren und dann können Sie einfach tun:

$myObject = ConvertFrom-Json $json