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

如何在PowerShell中导入1.19GB大JSON文件?

大JSON文件的PowerShell导入方案

针对1.19GB级别的大JSON文件,常规Get-Content结合ConvertFrom-Json会触发System.OutOfMemoryException,甚至直接读取拼接内容的方式也会因为内存不足失败,这里提供PowerShell 7.3.6下的可行解决办法:

流式反序列化核心方案

利用.NET的System.Text.Json.JsonSerializer进行流式读取,避免一次性加载整个文件到内存:

# 引入所需.NET命名空间
using namespace System.Text.Json
using namespace System.IO

# 打开目标JSON文件的只读流
$fileStream = [File]::OpenRead("你的大文件路径.json")

try {
    # 配置JSON解析选项(按需调整,比如忽略大小写、允许尾随逗号等)
    $jsonOptions = [JsonSerializerOptions]@{
        PropertyNameCaseInsensitive = $true
        AllowTrailingCommas = $true
    }

    # 异步流式反序列化并同步获取结果
    $jsonObj = [JsonSerializer]::DeserializeAsync($fileStream, [object], $jsonOptions).GetAwaiter().GetResult()
}
finally {
    # 确保流被正确释放,避免资源泄漏
    $fileStream.Dispose()
}

数组类大JSON的逐元素处理(内存更友好)

如果你的大JSON是数组结构,可以用JsonDocument逐元素解析,进一步降低内存占用:

using namespace System.Text.Json
using namespace System.IO

$fileStream = [File]::OpenRead("你的数组格式大文件.json")

try {
    $docOptions = [JsonDocumentOptions]@{
        AllowTrailingCommas = $true
        CommentHandling = [JsonCommentHandling]::Skip
    }

    # 解析JSON文档
    $jsonDoc = [JsonDocument]::Parse($fileStream, $docOptions)
    $rootElement = $jsonDoc.RootElement

    # 遍历数组元素并处理
    if ($rootElement.ValueKind -eq [JsonValueKind]::Array) {
        foreach ($element in $rootElement.EnumerateArray()) {
            # 将单个元素转为PowerShell对象
            $item = [JsonSerializer]::Deserialize($element, [PSObject])
            # 这里替换为你的业务处理逻辑
            Write-Output "已加载元素:$($item.Name)"
        }
    }
}
finally {
    $jsonDoc.Dispose()
    $fileStream.Dispose()
}

以上两种方法都是基于.NET的流式JSON处理能力,不会把整个文件内容加载到内存,从根源上避免内存溢出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 21:55:07