【问题标题】:Read issue from JSON从 JSON 读取问题
【发布时间】:2020-08-21 11:27:36
【问题描述】:

我在这里存储了 xml 文件。它包含 json。我无法读取并将其转换为数据框

清理代码

htext <- html_nodes(content, xpath=".//script[contains(., 'home_js_model')]") %>% html_text()
htext <- gsub("<script type=\"text/javascript\">", "", htext, fixed=TRUE)
htext <- gsub("var home_js_model = {", "", htext, fixed=TRUE)
htext <- gsub("</script>", "", htext, fixed=TRUE)
htext <- gsub("stock\":", "", htext, fixed=TRUE)

从 JSON 读取

json <- jsonlite::fromJSON(htext)

我也尝试过,但没有成功。

jsonlite::stream_in(textConnection(gsub("\\n", "", htext)))

【问题讨论】:

  • “没有成功”是什么意思?你有任何错误吗? json 是空的还是 NULLhtext 的值是多少?

标签: r rvest jsonlite


【解决方案1】:

你快到了。您需要从开头剪掉 var home_js_model = 并从末尾剪掉分号以解析 json。然而,结果是一个很长、很复杂的嵌套列表,所以你的解析问题可能才刚刚开始......

jsonlite::fromJSON(substr(htext, 21, 5615711))
#> $stock
#> $stock$period_title
#> [1] "1T2018"
#>
#> $stock$total
#> [1] 4162848
#>
#> $stock$total_sale
#> [1] 3426559
#>
#> $stock$total_rental
#> [1] 736289
#>
#> $stock$total_es
#> [1] 2196851
#>
#> ... (very very long list)

【讨论】:

  • 谢谢。我们可以将其转换为数据框吗?
  • 能否请您附上您用于文本清理的代码?
  • @john 我没有使用任何文本清理。我下载了您在问题中发布的链接。对象htext 出现在我的全局工作区中,上面的代码允许创建列表。
  • @john 该列表是不同类型、不同长度的数据的集合。将其转换为数据框是没有意义的,而且实际上是不可能的。您可能可以将其强制转换为几个不同的数据帧。列表中至少有两个对象已经是数据框:。如果你做my_json &lt;- jsonlite::fromJSON(substr(htext, 21, 5615711)) 那么my_json$ranking$salesmy_json$ranking$rental 都是数据框
  • 感谢您的建议。为了使它动态,我正在修剪(如建议的那样)str_trim(htext)。如何动态地从末端修剪半柱?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-08-22
  • 1970-01-01
相关资源
最近更新 更多