2016-08-12 31 views
-1

我有一個文本文件中包含行:將字符串轉換成JSON使用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"} 

這將是巨大的,如果有人能幫助如何將它使用PowerShell轉換成JSON(我用的ConvertTo-JSON試了一下,但沒有成功)。

+0

'的ConvertTo-Json'序列化的任意對象的JSON字符串,如'LS |的ConvertTo-Json'。您可能需要'ConvertFrom-Json',它將JSON字符串轉換爲自定義對象。 –

回答

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

這並不完全清楚你想要什麼。如果你想有一個有效 JSON字符串,則只是刪除該字符串的第一部分(這部分:TRACE 2016-06-23 08:47:54,803)和你做:

$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("{")) 

如果你想將它從JSON轉換爲對象,那麼你仍然需要將字符串轉換爲有效的JSON字符串,然後你可以簡單地這樣做:

$myObject = ConvertFrom-Json $json