我无法使用R来读取.json文件,但我可以在网站上看到它。
以下是数据网站↓
这是我的代码。
library(jsonlite)
link <- "https://data.kcg.gov.tw/dataset/7999ac19-e7dc-496a-9b7d-bd8daec107bd/resource/19d06299-a80c-42c2-a9b8-63d4466161a0/download/priceshistory_20160101-20161231.json"
kh <- fromJSON(link)
open.connection错误(con,&#34; rb&#34;):无法连接到服务器
任何帮助都会感激不尽。
> sessionInfo()
R version 3.3.1 (2016-06-21)
latform: x86_64-w64-mingw32/x64 (64-bit)
Running under: Windows 7 x64 (build 7601) Service Pack 1
答案 0 :(得分:1)
您的主要错误很可能是其他人指出的防火墙问题。您可以使用httr
更好地进行分类:
library(httr)
library(jsonlite)
link <- "https://data.kcg.gov.tw/dataset/7999ac19-e7dc-496a-9b7d-bd8daec107bd/resource/19d06299-a80c-42c2-a9b8-63d4466161a0/download/priceshistory_20160101-20161231.json"
此处的连接对我有用,但数据存在一些问题(这是我发布此答案的主要原因):
kh <- jsonlite::fromJSON(json_url)
## Error in parse_con(txt, bigint_as_char) :
## lexical error: invalid char in json text.
## [ { "result":{ "
## (right here) ------^
## In addition: Warning message:
## JSON string contains (illegal) UTF8 byte-order-mark!
该错误意味着BOM未被删除(我们必须这样做,然后)。
以下是使用httr::GET()
进行分类连接的方法:
httr::GET(
link,
progress(), # it's a 13MB file on a slow connection for North America, so this helps
verbose() # this lets you see the connection info to make sure nothing is wrong
) -> res
这没有错误所以我没有粘贴详细输出,但你应该查看详细输出并查看HTTP错误显示的内容。这可能有助于诊断任何代理/防火墙问题。使用最新的curl
和httr
软件包也可以帮助您解决这个问题,因为它们现在可以更好地使用Windows操作系统。
返回BOM问题,这仍然可能是您的问题:
hk_raw <- httr::content(res, as="raw")
hk_raw[1:10]
## [1] ef bb bf ef bb bf 5b 0a 20 20
我不确定为什么UTF-8 BOM序列存在2x,但这很容易处理(并且需要处理)
hk <- jsonlite::fromJSON(rawToChar(hk_raw[-(1:6)]))
这应该为您提供完全读入的数据结构。