【问题标题】:How do I read multiple JSON structures contained in one file?如何读取一个文件中包含的多个 JSON 结构?
【发布时间】:2016-09-08 21:35:39
【问题描述】:

我有一个具有这种结构的 .txt 文件

section1#[{"p": "0.999834", "tag": "MA"},{"p": "1", "tag": "MO"},...etc...}]
section1#[{"p": "0.9995", "tag": "NC"},{"p": "1", "tag": "FL"},...etc...}]
...
section2#[{"p": "0.9995", "tag": "NC"},{"p": "1", "tag": "FL"},...etc...}]

我正在尝试通过使用 R 和命令来阅读它

library(jsonlite)
data <- fromJSON("myfile.txt")

但我明白了

Error in feed_push_parser(readBin(con, raw(), n), reset = TRUE) : 
  lexical error: invalid char in json text.
                                       section2#[{"p": "0.99
                     (right here) ------^

如何分节阅读?

【问题讨论】:

  • 您可能需要使用readLines 手动读取文件,删除section 部分,然后将其传递给fromJSON
  • 是什么生成了这样的文件?
  • 来自mySQL
  • 你在 mySQL 中运行什么命令会产生这种疯狂的格式?

标签: json r jsonlite


【解决方案1】:

去掉前缀,将扁平化的 JSON 数组绑定到一个数据框中:

raw_dat <- readLines(textConnection('section1#[{"p": "0.999834", "tag": "MA"},{"p": "1", "tag": "MO"}]
section1#[{"p": "0.9995", "tag": "NC"},{"p": "1", "tag": "FL"}]
section2#[{"p": "0.9995", "tag": "NC"},{"p": "1", "tag": "FL"}]'))

library(stringi)
library(purrr)
library(jsonlite)

stri_replace_first_regex(raw_dat, "^section[[:digit:]]+#", "") %>% 
  map_df(fromJSON)
##          p tag
## 1 0.999834  MA
## 2        1  MO
## 3   0.9995  NC
## 4        1  FL
## 5   0.9995  NC
## 6        1  FL

【讨论】:

  • 非常感谢。我没有创建该文件,它来自公共数据。这正是我害怕的,json结构无效。
【解决方案2】:

从每一行中删除section#。然后您的 .txt 将在每个索引处有一个带有 JSON 对象的二维数组。 您可以通过将其访问为 foo[0][0] 作为第一行的第一个对象和 foo[m][n] 来访问元素,其中 mnumber of sections -1nnumber of objects in each section -1

【讨论】:

  • 实际上,如果您删除前缀,它仍然不是有效的 JSON 文件。 JSON 文件需要有单个根元素。您需要有一个包装 [ ] 并在每一行的末尾有 , 。它更像是JSON line 格式。
  • @MrFlick 这不是 JSON 文件,而是二维数组。
  • 嗯,它不是 JSON 数组。您是在谈论使用readLines() 或其他方式读取数据吗?你如何在 R 中对它进行配对以使其成为 2D 数组?
  • @MrFlick 我正在调查,很快会更新我的答案。
  • @Prateek Gupta。非常感谢。我没有创建该文件,它来自公共数据。这正是我害怕的,json结构无效。
猜你喜欢
  • 1970-01-01
  • 2012-07-23
  • 2019-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 2017-03-02
相关资源
最近更新 更多