You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修改PowerShell脚本实现每行CSV数据生成独立JSON文件

问题:为CSV中每个人生成独立JSON文件

我现有一段PowerShell脚本,可读取CSV文件的每一行并将数据存入PsCustomObject,当前会生成一个名为“Kevin Jessica.json”的文件,包含所有数据。但我希望为每个人生成单独的JSON文件。

示例CSV文件(whatever3.csv):

Name,Language,State
Kevin,Powershell,Texas
Jessica,C,NewYork

当前脚本:

$csvData   = Import-Csv -Path "C:\Users\user1\Downloads\whatever3.csv"
$fileNames = $csvData.Name | Select -Unique
$DestinationDir = "C:\Users\user1\Downloads\sample"
$customheader = "MyClass"

$all = $csvData | ForEach-Object {
    $val = $_ | Select-Object *
[PsCustomObject]@{
$customheader = @($val)
} | ConvertTo-Json | Add-Content -Path "$DestinationDir\$fileNames.json"
}

期望输出:两个独立文件Kevin.json和Jessica.json,各自包含对应人员的JSON数据结构。


解决方案

修改后的脚本如下:

$csvData = Import-Csv -Path "C:\Users\user1\Downloads\whatever3.csv"
$DestinationDir = "C:\Users\user1\Downloads\sample"
$customheader = "MyClass"

# 确保目标目录存在,不存在则创建
if (-not (Test-Path -Path $DestinationDir)) {
    New-Item -ItemType Directory -Path $DestinationDir | Out-Null
}

$csvData | ForEach-Object {
    # 以当前行的Name值作为文件名
    $fileName = "$($_.Name).json"
    $filePath = Join-Path -Path $DestinationDir -ChildPath $fileName
    
    # 构造自定义对象并转换为JSON,覆盖写入对应文件
    [PsCustomObject]@{
        $customheader = @($_)
    } | ConvertTo-Json | Set-Content -Path $filePath -Encoding utf8
}

关键修改说明

  • 移除了错误的$fileNames变量:原脚本中该变量会将所有Name值拼接成一个字符串,导致生成错误命名的文件。
  • 遍历每一行时直接使用当前行的$_.Name作为文件名,确保每个人对应独立文件。
  • 用Set-Content替代Add-Content:避免重复运行脚本时追加内容,保证每个文件只保留对应人员的最新数据。
  • 添加目录检查:自动创建不存在的目标目录,避免路径错误。
  • 使用Join-Path拼接路径:比手动拼接字符串更安全,避免路径分隔符问题。

内容的提问来源于stack exchange,提问作者B Lee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 21:42:41