【发布时间】:2015-11-18 18:24:06
【问题描述】:
以下代码存在性能问题。我想将一些信息从 JSON 文件解析为 CSV。 JSON 本身有大约 200k 行。这种转换的性能不好,因为处理这样一个文件需要超过 1 小时。
我认为问题可能出在Add-Content 函数上,因为我使用的是普通硬盘驱动器。如果您看到代码的任何改进或我可以做的任何更改,请告诉我?
$file = "$disk\TEMP\" + $mask
$res = (Get-Content $file) | ConvertFrom-Json
$file = "$disk\TEMP\result.csv"
Write-Host "Creating CSV from JSON" -ForegroundColor Green
Add-Content $file ("{0},{1},{2},{3},{4}" -f "TargetId", "EventType", "UserId", "Username", "TimeStamp")
$l = 0
foreach ($line in $res) {
if($line.EventType -eq 'DirectDownloadCompleted' -and $line.TargetDefinition -eq 'GOrder') {
#nothing here
} elseif($line.EventType -eq 'DirectDownloadCompleted' -and $line.TargetDefinition -eq 'GFile') {
Add-Content $file ("{0},{1},{2},{3},{4}" -f
$line.AssetId, $line.EventType, $line.UserId, $line.UserName, $line.TimeStamp)
$l = $l + 1
} else {
Add-Content $file ("{0},{1},{2},{3},{4}" -f $line.TargetId, $line.EventType, $line.UserId, $line.UserName, $line.TimeStamp)
$l = $l + 1
}
}
【问题讨论】:
-
如果你想要更好的性能,我建议使用 jq,它很容易安装在 Windows 上。要使用 jq 处理 200,000 行文件来完成您描述的那种任务,不应该超过 1 秒。 jq下载页面为stedolan.github.io/jq/download;如果你有巧克力,以下应该足够了:choco install jq
标签: json csv powershell