WindowsPowerShell

PowerShellでCSV・JSON・XMLを読み書きする【Import-Csv・ConvertFrom-Json完全ガイド】

WindowsPowerShell
記事内に広告が含まれています。

PowerShellはCSV・JSON・XMLの読み書きに特に強く、データ変換・バッチ処理・API連携で威力を発揮します。

CSVの読み書き

# CSVを読む(ヘッダー付きで自動的にオブジェクト配列になる)
$users = Import-Csv -Path "users.csv" -Encoding UTF8
$users | ForEach-Object {
    Write-Host "$($_.Name): $($_.Email)"
}

# フィルタリング
$activeUsers = $users | Where-Object { $_.Status -eq "active" }

# CSVに書き出す
Get-Process | Select-Object Name, Id, CPU |
    Export-Csv -Path "processes.csv" -Encoding UTF8 -NoTypeInformation

# オブジェクト配列をCSVに変換
$data = @(
    [PSCustomObject]@{Name="Taro"; Age=25; City="Tokyo"},
    [PSCustomObject]@{Name="Hanako"; Age=30; City="Osaka"}
)
$data | Export-Csv -Path "output.csv" -Encoding UTF8 -NoTypeInformation

JSONの読み書き

# JSONファイルを読む
$config = Get-Content -Path "config.json" -Raw | ConvertFrom-Json
Write-Host $config.database.host
Write-Host $config.database.port

# オブジェクトをJSONに変換して書き出す
$settings = @{
    server = "192.168.1.10"
    port = 8080
    debug = $false
    tags = @("production", "web")
}
$settings | ConvertTo-Json -Depth 5 | Set-Content -Path "settings.json" -Encoding UTF8

# REST APIからJSONを取得
$response = Invoke-RestMethod -Uri "https://api.github.com/users/octocat"
Write-Host "名前: $($response.name)"
Write-Host "フォロワー: $($response.followers)"

XMLの読み書き

# XMLファイルを読む
[xml]$xml = Get-Content "config.xml"
$xml.configuration.database.host

# XMLを作成
$doc = New-Object System.Xml.XmlDocument
$root = $doc.CreateElement("servers")
$server = $doc.CreateElement("server")
$server.SetAttribute("name", "web01")
$server.SetAttribute("ip", "192.168.1.10")
$root.AppendChild($server) | Out-Null
$doc.AppendChild($root) | Out-Null
$doc.Save("servers.xml")

Import-CsvはExcelからエクスポートしたCSVをそのまま読み込んでオブジェクト配列にしてくれるので、「Excelデータを使ったバッチ処理」との相性が抜群です。ただしShift-JISのCSVはEncodingパラメーターで「Default」または「shift-jis」を指定しないと文字化けするので注意が必要です。

hobbyshift管理人

まとめ

  • Import-CsvでCSVをオブジェクト配列として読み込み、Export-Csvで書き出せる
  • ConvertFrom-JsonでJSON文字列をオブジェクトに、ConvertTo-Jsonで逆変換できる
  • Invoke-RestMethodはJSONを自動でオブジェクトに変換してくれるのでAPI連携に最適

コメント

タイトルとURLをコピーしました