c++ - 如何读取大 json?

标签 c++ c json r

我收到带有要在 R 中分析的数据的 json 文件,为此我使用 RJSONIO 包:

library(RJSONIO)
filename <- "Indata.json"
jFile <- fromJSON(filename)

当 json 文件大于大约 300MB(未压缩)时,我的计算机开始使用交换内存并继续解析(fromJSON)几个小时。解析一个 200MB 的文件只需大约一分钟。

我在 Ubuntu 64 位和 16GB RAM 上使用 R 2.14(64 位),所以我很惊讶在大约 300MB 的 json 中已经需要交换。

我可以做些什么来读取大的 json?内存设置中有什么东西把事情搞砸了吗?我已经重新启动了 R 并且只运行了上面的三行。 json 文件包含 2-3 列短字符串和 10-20 列数字从 0 到 1000000。即它是大尺寸的行数(解析数据中超过一百万行)。


更新:从评论中我了解到 rjson 在 C 中做得更多,所以我尝试了一下。一个 300MB 的文件,使用 RJSONIO(根据 Ubuntu 系统监视器)达到 100% 的内存使用(从 6% 基线)并继续交换,使用包 rjson 只需要 60% 的内存,并且解析在合理的时间(分钟)内完成。

最佳答案

虽然您的问题没有具体说明这一细节,但您可能希望确保将整个 JSON 加载到内存中确实是您想要的。看起来 RJSONIO 是一个基于 DOM 的 API。

你需要做什么计算?你可以使用流解析器吗? yajl 是用于 JSON 的类似 SAX 的流解析器的示例。 .

关于c++ - 如何读取大 json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8216743/

相关文章:

c - 正在存储截断的值

python - 显示来自 2 个独立 JSON 文件的 JSON 数据 Discord PY

c++ - 加载共享库时出错 : libboost_system. so.1.45.0:无法打开共享对象文件:没有这样的文件或目录

c++ - 来自 C++11 中 C99 的 fenv.h

c++ - 如何约束模板化 constexpr 递归函数输入参数

c - C 语言的蛙跳游戏

android - 从 mySQL 服务器获取数据时让 ListView 工作

php - openssl_public_encrypt 和 JSON

c++ - typedef 是否有助于提高可扩展性

c++ - 确定 QProcess 是否正在等待用户输入