首页 > 解决方案 > 在 R 中使用 rjson 包读取 iso_3166_2.js

问题描述

我需要阅读jsR 来下载iso_3166_2数据。我如何使用rjson阅读?

library("rjson")
json_file <- "https://raw.githubusercontent.com/oodavid/iso-3166-2/master/iso_3166_2.js"
lines <- readLines(json_file)

标签: rjson

解决方案


包喜欢rjsonjsonlite期望读取格式正确的 JSON 数据,而不是任意的 javascript 文件。您可以使用JSON 验证器验证某些内容是否为 JSON 格式。在这你很幸运,它非常接近一个正确的 JSON 文件,你只需要清理一些东西。你只需要清理第一行和最后一行

json_file <- "https://raw.githubusercontent.com/oodavid/iso-3166-2/master/iso_3166_2.js"
lines <- readLines(json_file)
lines[1] <- gsub(".*(?={)", "", lines[1], perl=TRUE)
lines[length(lines)] <- gsub(";.*$", "", lines[length(lines)], perl=TRUE)
mydata <- jsonlite::fromJSON(paste(lines, collapse="\n"))

在这里我使用jsonlite而不是rjson因为它更容易允许输入向量并且似乎不会被引用编码绊倒。


推荐阅读