C++ 如何阅读大json?

C++ 如何阅读大json?,c++,c,json,r,C++,C,Json,R,我收到json文件,其中包含要在R中分析的数据,为此我使用RJSONIO包: library(RJSONIO) filename <- "Indata.json" jFile <- fromJSON(filename) 库(RJSONIO) filename尽管您的问题没有指定此细节,但您可能希望确保在内存中加载整个JSON实际上就是您想要的。看起来RJSONIO是一个基于DOM的API 你需要做什么计算?你能使用流式解析器吗?类似SAX的JSON流式解析器的一个例子是。不是内存大

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

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

filename尽管您的问题没有指定此细节,但您可能希望确保在内存中加载整个JSON实际上就是您想要的。看起来RJSONIO是一个基于DOM的API


你需要做什么计算?你能使用流式解析器吗?类似SAX的JSON流式解析器的一个例子是。

不是内存大小,而是速度,对于非常小的
iris
数据集(仅7088字节),
RJSONIO
包比
rjson
慢一个数量级。不要使用“R”方法,除非你真的必须这样做!注意两组结果中的不同单位

library(rjson) # library(RJSONIO)
library(plyr)
library(microbenchmark)
x <- toJSON(iris)
(op <- microbenchmark(CJ=toJSON(iris), RJ=toJSON(iris, method='R'),
  JC=fromJSON(x), JR=fromJSON(x, method='R') ) )

# for rjson on this machine...
Unit: microseconds
  expr        min          lq     median          uq        max
1   CJ    491.470    496.5215    501.467    537.6295    561.437
2   JC    242.079    249.8860    259.562    274.5550    325.885
3   JR 167673.237 170963.4895 171784.270 172132.7540 190310.582
4   RJ    912.666    925.3390    957.250   1014.2075   1153.494

# for RJSONIO on the same machine...
Unit: milliseconds
  expr      min       lq   median       uq      max
1   CJ 7.338376 7.467097 7.563563 7.639456 8.591748
2   JC 1.186369 1.234235 1.247235 1.265922 2.165260
3   JR 1.196690 1.238406 1.259552 1.278455 2.325789
4   RJ 7.353977 7.481313 7.586960 7.947347 9.364393
library(rjson)#library(RJSONIO)
图书馆(plyr)
图书馆(微基准)

x尽管这个问题已经很老了,但这可能对有类似问题的人有用

函数
jsonlite::stream_in()
允许定义
pagesize
来设置一次读取的行数,并且在每次迭代中应用于此子集的自定义函数可以作为
处理程序提供。这允许处理非常大的JSON文件,而无需同时将所有内容读入内存

stream_in(con, pagesize = 5000, handler = function(x){
    # Do something with the data here
})

我没有任何远程处理如此大的json文件的经验,但您可能会看到带有相同名称函数的
rjson
包。我听说它可以比RJSONIO快。是的,rjson包有更多的C代码,因此速度更快,内存效率可能更高。。。虽然我也没有这方面的经验。这里有人没有说实话(这里=package
Description
RJSONIO实际上宣传了它的速度性能:
这是rjson软件包的替代品。该版本太慢,无法将大型R对象转换为JSON,并且不可扩展,但它是一个非常有用的原型。解析速度很快。
。现在,什么是快速解析-
RJSONIO
rjson
?有什么性能测试吗?好的,仅供参考,RJSONIO对我更有效?但我的只是一个小于1MB的小json文件。rjson花了我几秒钟,而RJSONIO在一瞬间就完成了。因此,RJSONIO对速度性能的描述对我来说是真实的。而且,当我在记事本++中打开rjson的输出文件时,它不是人类可读的。第三,我真的不知道为什么rjson不能将它生成的输出读回R?我的数据结构是由字符向量(可能为空)组成的嵌套列表。在任何情况下,为了找到更好的软件包,我认为来回切换都很容易。我知道这个问题很老了,但对于那些正在搜索互联网的人来说,请看看这里发布的基准:请同时检查结果的
单位