fromJSON出错:意外字符

时间:2017-09-15 18:30:19

标签: json r ggmap

我想使用R中包geocode中的函数ggmap但是我无法在R文档中运行示例代码:

geocode("houston texas", output = "more")

结果是:

Information from URL : http://maps.googleapis.com/maps/api/geocode/json?address=houston%20texas&sensor=false
Error in fromJSON(paste(lines, collapse = "")) : unexpected character '<'

我想知道这是fromJSON的问题,所以我下载了JSON文件(如abcd.json),然后将其导入R:

data <- fromJSON(file="abcd.json")

它有效。

但是当我这样做时:

theurl <- "http://maps.googleapis.com/maps/api/geocode/json?address=houston%20texas&sensor=false"
data <- fromJSON(file=theurl)

它返回相同的错误:

Error in fromJSON(paste(lines, collapse = "")) : unexpected character '<'

我与rjson一起尝试了RJSONIORcurl。无论如何都会返回错误。

相关信息:

  1. RStudio版本1.0.143;
  2. R版本3.4.0
  3. macOS Sierra 10.12.6
  4. 地点:北京。 (可能与互联网禁止谷歌地图API有关。)

2 个答案:

答案 0 :(得分:0)

鉴于无效字符为<,您可能会提取某种HTML错误消息。直接提取数据URL会让您确定:

theurl <- "http://maps.googleapis.com/maps/api/geocode/json?address=houston%20texas&sensor=false"
jsondata <- fread(theurl)
cat(jsondata)

我建议您尝试使用HTTPS链接,但这可能会解决问题(除非它是伟大的防火墙。)

答案 1 :(得分:0)

我选择使用工具箱JSONlab转向Matlab。

http://cn.mathworks.com/matlabcentral/fileexchange/33381-jsonlab--a-toolbox-to-encode-decode-json-files

其余代码的一般概念与geocode()

几乎相同

它有效。

对于那些位于中国大陆的人/学院,R包ggmap中的许多功能都不可用(由于防火墙)。使用包geoChina来代替您的项目。百度API可在geoChina中找到。它比中国的谷歌地图API更快。

此外,如果您的数据非常大,

result <- apply(data, 1, geocode)

可能会返回错误。建议Matlab处理相对较大的数据。