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