[英]How to read a newline delimited JSON file from R?
我有一个换行符分隔(即,每个 JSON 对象仅限于文件中的 1 行):
{"name": "json1"}
{"name": "json2"}
{"name": "json3"}
在 Python 中,我可以轻松阅读如下(我必须使用编码encoding='cp850'
来读取我的真实数据):
import json
objs = []
with open("testfile.json", encoding='cp850') as f:
for line in f:
objs.append(json.loads(line))
我怎样才能在 R 中做类似的把戏?
最后我想得到一个 data.frame:
library("jsonlite")
library("data.table")
d <- fromJSON("testfile.json", flatten=FALSE)
df <- as.data.frame(d)
我们可以使用jsonlite
stream_in
library(jsonlite)
out <- stream_in(file('testfile.json'))
out
# name
#1 json1
#2 json2
#3 json3
str(out)
#'data.frame': 3 obs. of 1 variable:
#$ name: chr "json1" "json2" "json3"
您可以读取并将数据处理为正确的格式,然后解析 JSON
jsonlite::fromJSON(sprintf('[%s]', paste(readLines('text.json', warn = FALSE),
collapse = ',')))
# name
# 1 json1
# 2 json2
# 3 json3
(您可以使用众多替代方案之一作为 JSON 包,例如
jsonlite
一个更像R
的包,因为它主要用于数据帧RJSONIO
一个更多的Python
-ic 包,主要用于列表或另一个)
读取换行 json 的最快方法可能是ndjson
stream_in
。 它使用底层C++
库(尽管我认为它仍然是单线程的)。 尽管如此,我发现它比(仍然非常好的) jsonlite
库jsonlite
。 作为奖励,默认情况下json
是扁平化的。
library(ndjson)
out<- ndjson::stream_in(path='./testfile.json')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.