如何在字符串的某些部分中转义反斜杠 - R

时间:2016-09-07 09:46:04

标签: json regex r

我正在尝试使用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}}

1

由于

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。