我正在尝试使用jsonlite来平整谷歌地图方向api的结果。
结果是json格式,它们在这里有一些类似的部分:
\"polyline\" : {\n \"points\"
: \"xdyQtaqmJb@Ab@?|@AfBAtA?l@At@@D?F?D?\"\n
},\n
\"start_location\" : {\n
\"lat\" : -3.0831712,\n
\"polyline\" : {\n \"points\"
:
\"b}yQ`iqmJFD@@?@@@?@?@?@?B?@?@CXAPAJATCZ?@?@?@?@@@?
@@B@@@?@@@@@?@?@?@?bBH\"\n },\n
\"start_location\" : {\n
在大多数情况下,我在编码点内部有“\”,这反过来使jsonlite崩溃并出现错误
> fromJSON(out)
Error: lexical error: inside a string, '\' occurs before a character which it may not.
"points" : "rsuQnzomJhBD\@lAF" },
(right here) ------^
我需要一些关于如何在\"points\" : \
这里是我用来获取json输出的代码
origin="-3.06010901,-60.04375624"
destination="-3.0876276,-60.06031519"
mode="walking"
units="metric"
language="en-EN"
baseURL <- "https://maps.googleapis.com/maps/api/directions/json?"
callURL <- paste0(baseURL,"origin=", origin,
"&destination=", destination,
"&units=", tolower(units),
"&mode=", tolower(mode),
"&language=",language)
tmout=10
opts = RCurl::curlOptions(connecttimeout=tmout)
out <- RCurl::getURL(callURL, .opts = opts)
好吧,我仍然没有一个简单的答案来将这个输出展平到一个数据框,但是使用这篇文章中的例子[R中对JSON包的偏差比较]我必须使用{来重新检查输出{1}}
由于
答案 0 :(得分:2)
如果您使用的是Google Maps API,那么我的googleway
包会为您处理
library(googleway)
## your valid Google API key
key <- read.dcf("~/Documents/.googleAPI", fields = "GOOGLE_API_KEY")
directions <- google_directions(origin = "Melbourne International Airport, Melbourne, Austrlia",
destination = "MCG, Melbourne, Australia",
key = key)
## and to decode the polyline:
df_route <- decode_pl(directions$routes$overview_polyline$points)
head(df_route)
# lat lon
# 1 -37.67477 144.8494
# 2 -37.67473 144.8494
# 3 -37.67417 144.8493
# 4 -37.67411 144.8493
# 5 -37.67409 144.8494
# 6 -37.67409 144.8495
或者,如果您想自己执行此操作,最好使用jsonlite
包:jsonlite::fromJSON(your_url)
直接读取JSON。