IO.FileStream/JSON选项,以忽略正在解析的文件的部分



我有一个案例,收到一个包含JSON数据的大文件。不幸的是,它在文件的开头有一小段开销字符串数据,在文件的末尾有另一行开销字符串数据。我以前手动将文件数据读入字符串,并在内存中删除这些数据,但大小太大,我无法再这样做了。

我现在需要使用从流中读取的JSON对象反序列化器,但由于这些庞大的开销数据,这将失败。

所以我需要删除这个";膨胀";。

对我来说,一种选择是简单地重写文件,排除膨胀,然后使用新文件。然而,该文件>现在是1.5GB,这将增加分配的开销。

第二种选择可能是创建一个继承的FileStream类,它可以隐藏这个膨胀,有效地从流中删除坏的开销数据,同时仍然将剩余的数据流式传输到JSON反序列化器(这似乎很复杂,也很烦人(。

在我选择这些烦人的选项之前,有没有一种简单的方法来完成我错过的任务

示例文件数据。。。

HDR ZREOF100B   013 20220129    084455
{
"CUSTOMER_DATA": [
... allot of JSON data ...
]
}
TRL ZREOF100B         551

第一行和最后一行基本上是";Bloat";我指的是

根据@dbc的指示,这是我为那些有类似问题的人编写的最后一个工作对象解析例程。

Using fs As New IO.FileStream(fi.FullName, IO.FileMode.Open, IO.FileAccess.ReadWrite, IO.FileShare.Read)
Dim enc As Text.Encoding = Text.Encoding.GetEncoding(1252) ' this is "Windows-1252" which is for Extended ANSI character set like ASCII but including (128-255) for accented characters.
Using sr As New IO.StreamReader(fs, enc)
sr.ReadLine() ' advance past first line of garbage.
Using jtr As New Json.JsonTextReader(sr)
Dim ser As New Json.JsonSerializer
ser.CheckAdditionalContent = False ' should ignore the bloat after the JSON object ends.
Return ser.Deserialize(jtr)
End Using
End Using
End Using

最新更新