Nat*_*rth 2 javascript parsing json google-apps-script google-directions-api
首先,对于在代码、js、Google Apps 脚本以及 stackoverflow.com 方面与成为 n00b 相关的任何错误表示广泛的歉意。
\n\n我正在尝试从对 Google Maps' Directions API 的 API 调用中提取折线。从 API 结果解析,我得到:
\n\n{routes=[{summary=A215, copyrights=Map data \xc2\xa92017 Google, legs=[{duration={text=18 mins, value=1108}, start_location={lng=-0.1295712, lat=51.4227696}, distance={text=7.2 km, value=7187}, start_address=London SW16 6ET, UK, end_location={lng=-0.0706306, lat=51.3869032}, duration_in_traffic={text=15 mins, value=882}, end_address=Woodside Green, London SE25 5EU, UK, via_waypoint=[], steps=[{duration={text=1 min, value=6}, start_location={lng=-0.1295712, lat=51.4227696}, distance={text=29 m, value=29}, travel_mode=DRIVING, html_instructions=Head <b>north</b> on <b>Streatham High Rd</b>/<b>A23</b> toward <b>Streatham Common N</b>/<b>A214</b>, end_location={lng=-0.1297011, lat=51.42301399999999}, polyline={points=iozxHxhXo@X}},....\nRun Code Online (Sandbox Code Playgroud)\n\n我的脚本如下:
\n\nfunction listJourneyPoints(value) {\n\n //Temporary url for var value\n var value = "https://maps.googleapis.com/maps/api/directions/json?origin=SW16%206ET&destination=SE25%205EU&mode=driving®ion=UK&departure_time=1507676400&key=AIzaSyDbswrt7RFy3s13ulO9BUY9jQUNchUfi4o";\n\n //Call the google route planner api\n var routeResponse = UrlFetchApp.fetch(value);\n\n //Parse JSON from routeResponse\n var json = routeResponse.getContentText();\n var data = JSON.parse(json);\n\n //Get the polyline\n var polyl = data["routes"]["legs"]["steps"]["polyline"];\n Logger.log (polyl);\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n我不知道如何通过数组和对象导航到折线。我知道点表示法不适用于数组,因此使用了方括号,但无论我尝试什么,我都无法在data["routes"]["legs"]没有得到“TypeError:无法从未定义中读取属性“步骤””的情况下继续前进。我知道问题可能在于我不了解数据结构,但经过几个小时的搜索,包括使用在线 Json 解析器来阐明结构,我仍然陷入困境,因此将不胜感激。谢谢!
小智 6
在处理复杂的嵌套 JSON 时,我喜欢Logger.log()多次浏览它,以便更好地了解正在发生的情况。即使没有,向 JSON 添加一些格式以查看其结构并删除不需要的条目都有助于了解如何访问特定元素:
{
routes: [{
legs: [{
steps: [{
polyline: {
points: iozxHxhXo@X
}
}]
}]
}]
}
Run Code Online (Sandbox Code Playgroud)
所以首先要注意的是它routes保存一个数组,这意味着我们需要访问它的索引来访问嵌套对象。幸运的是,所有嵌套元素都包装在一个对象中,因此我们只需访问数组的第一个元素:data["routes"][0]。如果我在深入嵌套对象时仍然遇到麻烦,我将继续使用Logger.log(data["routes"][0]...)来查看下一个键/索引应该是什么。
看来您对层次结构有很好的了解,而您只是缺少对象的数组部分,这就是您收到错误的原因。[0]因此,在每次按键调用后添加's 应该可以解决您的问题。
另外,作为旁注,您可以在 Google 脚本中访问对象中的键时使用点表示法,即data.routes[0].legs[0].steps[0].polyline(返回polyline对象)。
| 归档时间: |
|
| 查看次数: |
5187 次 |
| 最近记录: |