繁体   English   中英

如何从 R 读取换行符分隔的 JSON 文件?

[英]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++库(尽管我认为它仍然是单线程的)。 尽管如此,我发现它比(仍然非常好的) jsonlitejsonlite 作为奖励,默认情况下json是扁平化的。

library(ndjson)
out<- ndjson::stream_in(path='./testfile.json')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM