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

如何用PowerShell将拆分后的JSON转为NDJSON格式输出?

问题:将NDJSON文件拆分后直接输出NDJSON格式

我已实现NDJSON文件的读取与拆分,但生成的结果是JSON数组格式,想直接输出NDJSON格式,是否无需额外字符串处理?

输入文件(test.json)

{"PERIOD":"2024004","JRNAL_NO":"38115"}
{"PERIOD":"2024004","JRNAL_NO":"38115"}
{"PERIOD":"2024004","JRNAL_NO":"38115"}
{"PERIOD":"2024004","JRNAL_NO":"38115"}
{"PERIOD":"2024004","JRNAL_NO":"38116"}

当前使用的PowerShell脚本

$json = (Get-Content C:\Temp\test.json) | ConvertFrom-Json

$jnl_list = $json.JRNAL_NO | select -Unique

ForEach ($jnl in $jnl_list) {
    $Array = $json | Where-Object {$_.JRNAL_NO -eq $jnl}
    $res = ($Array | ConvertTo-Json)    
    $res | Out-File -FilePath .\JNL\$($jnl).json   
}

当前输出(38115.json)

[
    {
        "PERIOD":  "2024004",
        "JRNAL_NO":  "38115"
    },
    {
        "PERIOD":  "2024004",
        "JRNAL_NO":  "38115"
    },
    {
        "PERIOD":  "2024004",
        "JRNAL_NO":  "38115"
    },
    {
        "PERIOD":  "2024004",
        "JRNAL_NO":  "38115"
    }
]

期望输出

38115.json

{"PERIOD":"2024004","JRNAL_NO":"38115"}
{"PERIOD":"2024004","JRNAL_NO":"38115"}
{"PERIOD":"2024004","JRNAL_NO":"38115"}
{"PERIOD":"2024004","JRNAL_NO":"38115"}

38116.json

{"PERIOD":"2024004","JRNAL_NO":"38116"}

解决方案

可以直接输出NDJSON格式,无需额外字符串处理,只需调整ConvertTo-Json的使用方式:

修改后的PowerShell脚本:

# 逐行读取NDJSON并转换为对象
$jsonEntries = Get-Content C:\Temp\test.json | ForEach-Object { $_ | ConvertFrom-Json }

# 获取唯一的JRNAL_NO值
$jnl_list = $jsonEntries.JRNAL_NO | Select-Object -Unique

# 确保输出目录存在
$outputDir = ".\JNL"
if (-not (Test-Path $outputDir)) {
    New-Item -ItemType Directory -Path $outputDir | Out-Null
}

foreach ($jnl in $jnl_list) {
    # 筛选当前JRNAL_NO对应的条目
    $filteredEntries = $jsonEntries | Where-Object { $_.JRNAL_NO -eq $jnl }
    # 对每个条目单独生成单行JSON,拼接成NDJSON内容
    $ndjsonContent = $filteredEntries | ForEach-Object { $_ | ConvertTo-Json -Compress }
    # 写入文件
    $ndjsonContent | Out-File -FilePath (Join-Path $outputDir "$jnl.json") -Encoding utf8
}

关键修改说明

  • 避免数组转换:不对整个筛选后的数组执行ConvertTo-Json,而是对每个对象单独转换,这样不会生成数组包裹的结构
  • 单行JSON输出:使用-Compress参数让ConvertTo-Json输出紧凑的单行JSON,符合NDJSON每行一个JSON对象的要求
  • 目录检查:新增输出目录的创建逻辑,防止因目录不存在导致写入失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 19:20:00