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

使用PowerShell提取混杂文件中多段JSON并格式化多行保存咨询

混杂非JSON内容文件的多段JSON拆分提取方案

问题根源

  • 提取内容存为单行:本质是模式匹配时未保留原始文本的换行结构,或是读取文件时未使用全量读取参数吞掉了换行符
  • ConvertFrom-Json | ConvertTo-Json 格式错乱、特殊字符丢失:PowerShell 自带的ConvertTo-Json默认序列化深度仅为2级,嵌套超过2层的数组、对象会被直接截断或转成错误类型,同时默认转义规则与原始JSON的特殊字符处理逻辑存在差异,只要需求是原样提取JSON,完全不需要做序列化/反序列化操作,直接保留原始文本片段存储即可。

推荐实现(括号计数法,无正则匹配误差)

该方案不依赖正则匹配,通过逐字符遍历统计大括号层级定位JSON片段边界,可自动跳过字符串内部的大括号、转义引号、特殊符号,不会被嵌套结构干扰,提取内容与原文件中的JSON格式完全一致,无字符丢失。
以下是可直接运行的PowerShell代码:

# 替换为你的混杂文件实际路径,-Raw参数一次性读取全量原始内容,不做转码
$rawContent = Get-Content -Path ".\mixed_content.txt" -Raw
$jsonSegments = @()
$braceDepth = 0
$segmentStart = -1

for ($i = 0; $i -lt $rawContent.Length; $i++) {
    $currentChar = $rawContent[$i]
    # 跳过转义符关联的后续字符,避免误判转义引号
    if ($currentChar -eq '\' -and $i + 1 -lt $rawContent.Length) {
        $i++
        continue
    }
    # 跳过字符串包裹的全部内容,避免把字符串内部的{/}识别为JSON结构边界
    if ($currentChar -eq '"') {
        $i++
        while ($i -lt $rawContent.Length -and $rawContent[$i] -ne '"') {
            if ($rawContent[$i] -eq '\') { $i++ }
            $i++
        }
        continue
    }
    # 统计大括号层级,定位JSON起止位置
    if ($currentChar -eq '{') {
        if ($braceDepth -eq 0) { $segmentStart = $i }
        $braceDepth++
    }
    elseif ($currentChar -eq '}') {
        $braceDepth--
        if ($braceDepth -eq 0) {
            # 截取完整JSON原始片段
            $jsonSegments += $rawContent.Substring($segmentStart, $i - $segmentStart + 1)
            $segmentStart = -1
        }
    }
}

# 按顺序输出为独立JSON文件
for ($idx = 0; $idx -lt $jsonSegments.Count; $idx++) {
    $outputPath = "$($idx + 1).json"
    # 指定UTF8无BOM编码,-NoNewline避免末尾追加多余空行
    $jsonSegments[$idx] | Out-File -FilePath $outputPath -Encoding utf8NoBOM -NoNewline
}

方案特点

  • 格式完全保留:提取的是原文件中的原始JSON片段,缩进、换行和原内容完全一致,不会出现单行问题
  • 内容无丢失:全程不做JSON结构转换,原始内容中的特殊符号、转义字符、嵌套结构100%保留
  • 识别准确率高:不受JSON内部特殊字符、转义引号、嵌套层级影响,比正则匹配的容错性高很多
  • 无依赖:不需要安装第三方工具,原生PowerShell环境即可运行

注意事项

  • 读取文件必须加-Raw参数,禁止按行读取,避免破坏JSON的连续结构
  • 存储时不要使用Out-File的默认编码,指定utf8NoBOM避免编码乱码
  • 不需要修改JSON内容的前提下,绝对不要对提取的片段做ConvertFrom-Json/ConvertTo-Json转换,这是导致格式错乱的核心原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 02:30:14