首先,我们对在代码、js、Google Apps 脚本以及 stackoverflow.com 方面与 n00b 相关的任何错误表示广泛的歉意。
我正在尝试从对 Google map 的 Directions API 的 API 调用中提取折线。从 API 结果解析,我得到:
{routes=[{summary=A215, copyrights=Map data ©2017 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}},....
我的脚本如下:
function listJourneyPoints(value) {
//Temporary url for var value
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";
//Call the google route planner api
var routeResponse = UrlFetchApp.fetch(value);
//Parse JSON from routeResponse
var json = routeResponse.getContentText();
var data = JSON.parse(json);
//Get the polyline
var polyl = data["routes"]["legs"]["steps"]["polyline"];
Logger.log (polyl);
}
我不知道如何在数组和对象中导航到折线。我知道点表示法不适用于数组,因此使用了方括号,但无论我尝试什么,我都无法在不出现 'TypeError: 无法读取的情况下继续通过 data["routes"]["legs"]
属性从未定义的“步骤”。我知道问题可能在于我不理解数据结构,但经过几个小时的搜索,包括使用 online Json Parser为了阐明结构,我仍然陷入困境,所以将不胜感激任何帮助。谢谢!
最佳答案
在处理复杂的嵌套 JSON 时,我喜欢在浏览时多次使用 Logger.log()
以便更好地了解正在发生的情况。即使没有,向 JSON 添加一些格式以查看其结构并删除不需要的条目都有助于了解如何访问特定元素:
{
routes: [{
legs: [{
steps: [{
polyline: {
points: iozxHxhXo@X
}
}]
}]
}]
}
所以首先要注意的是 routes
保存一个数组,这意味着我们需要访问它的索引来访问嵌套对象。幸运的是,所有嵌套元素都包装在一个对象中,因此我们只需访问数组的第一个元素:data["routes"][0]
。如果我在深入嵌套对象时仍然遇到问题,我将继续使用 Logger.log(data["routes"][0]...) 来查看下一个键/索引应该是。
看起来您对层次结构有很好的了解,但您只是缺少对象的数组部分,这就是您收到错误的原因。因此,在每次按键调用后添加 [0]
应该可以解决您的问题。
此外,作为旁注,您可以在 Google 脚本中访问对象中的键时使用点表示法,即 data.routes[0].legs[0].steps[0].polyline
(返回polyline
对象)。
关于javascript - 如何在 Google Apps 脚本中访问解析嵌套 JSON 中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46670628/