【问题标题】:Google Maps Api JSON can't read html_instructionsGoogle Maps Api JSON 无法读取 html_instructions
【发布时间】:2013-09-05 12:26:19
【问题描述】:

我在从 Google Maps Api json 响应中读取 html_instructions 时遇到问题,我怀疑这在很大程度上是因为我不熟悉处理 Json 对象,但我无法找到对我有帮助的答案,所以在这里我们走了。

按照 Google 路线服务示例,我在 javascript 中创建了一个 calcRoute 函数,该函数发布开始和结束位置并接收 json 格式的驾驶指令列表,它在地图上绘制路线一切都很好。但是,当我想列出驾驶说明时,我可以生成一个包含每个步骤的距离和持续时间的步骤列表,但总是为 html_instructions 返回“未定义”。当我查看收到的 json 时,每个步骤都有一个带有文本的 html_instructions 属性,但我无法在代码中访问它。简单是的,所以我想,那我错过了什么白痴?

function calcRoute() {    
    var start = document.getElementById('start').value;
    try {
        var request = {
            origin: start,
            destination: bowenSense,           
            travelMode: google.maps.DirectionsTravelMode.DRIVING,
            unitSystem: google.maps.UnitSystem.IMPERIAL            
        };
        directionsService.route(request, function (response, status) {
            if (status == google.maps.DirectionsStatus.OK) {
                parseJson(response);
                directionsDisplay.setDirections(response);                
            }
            else {
                alert("Error: " + status);
            }
        });
    }
    catch (error) {
        alert("Error: " + error);
    };
}
function parseJson(response) {
    for (i = 0; i < response.routes.length; i++) {
        var route = response.routes[i];
        for (j = 0; j < route.legs.length; j++) {
            var leg = route.legs[j];
            // Do something with leg attributes...
            for (k = 0; k < leg.steps.length; k++) {
                var step = leg.steps[k];
                var distance = step.distance.text;    // fine
                var duration = step.duration.text;    // fine
                var instruction = step.html_instructions; // == undefined ?
                alert("instruction: " + instruction); 
                var mode = step.travel_mode;          // works
            }
        }        
    }
}

返回的示例 JSON,显示填充的 html_instructions 值

....
"steps" : [
              {
                 "distance" : {
                    "text" : "0.4 mi",
                    "value" : 695
                 },
                 "duration" : {
                    "text" : "1 min",
                    "value" : 61
                 },
                 "end_location" : {
                    "lat" : 53.3590723,
                    "lng" : -1.5065088
                 },
                 "html_instructions" : "Head \u003cb\u003ewest\u003c/b\u003e on \u003cb\u003eBannerdale Rd\u003c/b\u003e toward \u003cb\u003eNeedham Way\u003c/b\u003e",
                 "polyline" : {
                    "points" : "i~sdIjscHUvAi@vD[vAk@fC}@hDMf@[v@c@vAiA|Dy@dCuAzD[r@EJGLMXOTINQRUTYPSNOJQJSPOR"
                 },
                 "start_location" : {
                    "lat" : 53.3554115,
                    "lng" : -1.4983018
                 },
                 "travel_mode" : "DRIVING"
              },
              ....

令人费解的是,html_instruction 和 travel_mode 都是字符串值,一个有效,另一个无效,那么这是字符串内容的问题吗? html_instructions 字符串有很多 '\u**' (unicode?) 编码字符,而 travel_mode 是一组普通的大写字母?

对此的任何帮助将不胜感激,并提前致谢。 ps 如果重要的话,我使用的是最新版本的 Firefox 浏览器。

【问题讨论】:

  • 响应是文本还是 JSON?
  • 我的地图代码使用step.instructions 而不是step.html_instructions。如果有任何用处,我正在使用 API v3。 API docs 证实了这一点。
  • 你能知道你用的是哪个api吗?
  • 我应该说 v3。干杯安迪,我感谢 Moazzam,因为他回答的是答案而不是评论,但你们都是正确的。

标签: javascript json google-maps


【解决方案1】:

似乎当您使用URL 获取方向JSON 时,您会获得html_instructions 作为step 的属性,但使用JS API 时您会获得instructions 作为step 的属性。

【讨论】:

  • 感谢已修复,切换 html_instructions 获取说明。有点令人费解,但如果你看一下 json sn-p 它清楚地说 html_instruction
  • 我们如何用“Codable”协议解析它?我在继承自 Codable 协议的模型中尝试了 html_instructions 和指令。
【解决方案2】:

如果你输入alert("instruction: " + step.html_instruction);,你能看到会发生什么吗?

在之前使用 google maps api 时,我在让 JSON 按我想要的方式工作时遇到了很多麻烦 - 这是一个尝试了很多不同的事情的情况,这些事情在做之前应该不会有所作为......

【讨论】:

    【解决方案3】:

    我得到了答案,它不是 html_instructions 它的说明。改变 var 指令 = step.html_instructions; // == 未定义?

    到 var指令= step.instructions; 它对我很有效,我不知道为什么'html_instructions'变成了'instructions'

    【讨论】:

      猜你喜欢
      • 2012-04-15
      • 2022-06-18
      • 1970-01-01
      • 1970-01-01
      • 2016-11-12
      • 1970-01-01
      • 2013-09-05
      • 1970-01-01
      • 2012-05-17
      相关资源
      最近更新 更多