6

我正在尝试解析 JSON 文件并插入 SQL DB。只要文件很小(小于 5 MB),我的解析器就可以正常工作。

尝试读取大(> 5MB)文件时出现“内存不足异常”。

if (System.IO.Directory.Exists(jsonFilePath))
                {
                    string[] files = System.IO.Directory.GetFiles(jsonFilePath);
                    foreach (string s in files)
                    {
                        var jsonString = File.ReadAllText(s);
                        fileName = System.IO.Path.GetFileName(s);
                        ParseJSON(jsonString, fileName);

                    }
                }

我尝试了 JSONReader 方法,但没有运气将整个 JSON 转换为字符串或变量。请告知。

4

2 回答 2

3

使用 64 位,查看 RredCat 对类似问题的回答:

Newtonsoft.Json - 反序列化大对象时出现内存不足异常

NewtonSoft Jason 性能提示

阅读 David Cox 关于标记化的文章:

"基本方法是使用 JsonTextReader 对象,它是 Json.NET 库的一部分。JsonTextReader 一次读取一个 JSON 文件。因此,它避免了将整个文件读入字符串的开销。如从文件中读取令牌,创建对象并将其推入和推出堆栈。当到达文件末尾时,堆栈的顶部包含一个对象 - 对应于对象的非常大的对象树的顶部在原始 JSON 文件中

使用 Json.NET 解析大记录

于 2016-08-13T03:56:02.123 回答
-1

json 文件太大而无法以任何形式放入内存中。

您必须使用接受文件名或流作为输入的 JSON 阅读器。从您的问题中不清楚您使用的是哪个 JSON Reader。来自哪个图书馆?

如果您的 JSON 阅读器构建了整个 JSON 树,您仍然会耗尽内存。当您阅读 JSON 文件时,要么选择您要查找的数据,要么将数据结构写入另一种易于查询的磁盘格式,例如 sqlite 数据库。

于 2016-07-25T21:32:01.283 回答