无法从 MapQuest API 返回的 JSON 中检索值

Posted

技术标签:

【中文标题】无法从 MapQuest API 返回的 JSON 中检索值【英文标题】:Unable to retrieve value from JSON returned by MapQuest API 【发布时间】:2013-11-08 20:33:11 【问题描述】:

所以,我不知道为什么这不起作用:

$.getJSON('http://www.mapquestapi.com/geocoding/v1/reverse?key=KEY&callback=renderReverse&json&location=' + lat + ',' + longi, function(geo) 
    $('#location').html(geo.response.results[0].locations[0].adminArea4);
);

返回的json是:


    "results": [
        
            "locations": [
                
                    "latLng": 
                        "lng": -1,
                        "lat": 51
                    ,
                    "adminArea4": "Hamp",
                    "adminArea5Type": "City",
                    "adminArea4Type": "County",
                    "adminArea5": "Ba and De",
                    "street": "Teal Crescent",
                    "adminArea1": "GB",
                    "adminArea3": "England",
                    "type": "s",
                    "displayLatLng": 
                        "lng": -1.145731,
                        "lat": 51.240441
                    ,
                    "linkId": 0,
                    "postalCode": "RG3",
                    "sideOfStreet": "N",
                    "dragPoint": false,
                    "adminArea1Type": "Country",
                    "geocodeQuality": "ADDRESS",
                    "geocodeQualityCode": "L1AAA",
                    "mapUrl": "http://www.mapquestapi.com/staticmap/v4/getmap?key=Fmjtd|luubnu0yn5,7g=o5-9072ur&type=map&size=225,160&pois=purple-1,51.2401563,-1.1463337,0,0|&center=51,-17&zoom=15&rand=-859825484",
                    "adminArea3Type": "State"
                
            ],
            "providedLocation": 
                "latLng": 
                    "lng": -1.146334,
                    "lat": 51.240156
                
            
        
    ],
    "options": 
        "ignoreLatLngInput": false,
        "maxResults": -1,
        "thumbMaps": true
    ,
    "info": 
        "copyright": 
            "text": "© 2013 MapQuest, Inc.",
            "imageUrl": "http://api.mqcdn.com/res/mqlogo.gif",
            "imageAltText": "© 2013 MapQuest, Inc."
        ,
        "statuscode": 0,
        "messages": []
    

我猜是因为我弄错了geo.response.results

我们将不胜感激。

【问题讨论】:

请更改您的问题标题! 你确定$('#location').html( 正在执行吗?我希望这会失败,因为您告诉服务将其作为带有 &callback=renderReverse 的特定回调返回,除非服务忽略它并返回 CORS 标头。 @KevinB :我将 &callback=renderReverse 更改为 &callback=?它现在可以工作了,我从 mapquests 的 api 文档中获取了这个 url,忘记了它是用于 javascript 的!非常感谢! 你正确的凯文,我在答案中放了一个工作示例:) @GeorgeTaylor 不幸的是,仍然可以在修订历史记录中找到 API 密钥。您可以标记您的问题以引起版主注意并解释这种情况(他们将删除完整的修订版)。 【参考方案1】:

返回的 JSON 中没有 response 键。试试这个:

$.getJSON('http://www.mapquestapi.com/geocoding/v1/reverse?key=KEY&callback=renderReverse&json&location=' + lat + ',' + longi, function(geo) 
    $('#location').html(geo.results[0].locations[0].adminArea4);
);

【讨论】:

@ComFreek 感谢您的编辑。永远最好隐藏你的 API 密钥,OP。 虽然你的答案是正确的,但如果你运行它,它永远不会成功。我调试了,这是因为 json Request Failed: parsererror, SyntaxError: JSON.parse: unexpected character 中的语法错误 @ComFreek :干杯,你是对的! (感谢 API 密钥隐藏 :))【参考方案2】:

虽然上面的答案是正确的,但你的服务返回的 json 似乎也有问题。它包含无效字符,导致您的请求返回错误。

如果你使用了 json 成功和错误信息,你会看到这个

var lat = -1.146334;
var longi = 51.240156;


    $.getJSON( 'http://www.mapquestapi.com/geocoding/v1/reverse?key=**YOURKEY**&callback=renderReverse&json&location=' + lat + ',' + longi )
    .done(function( json ) 
    console.log( "JSON Data: " + json);
    )
    .fail(function( jqxhr, textStatus, error ) 
    var err = textStatus + ", " + error;
    console.log( "Request Failed: " + err );
    );

问题是因为您在响应中得到了 json p。要解决这个问题,您需要声明 jsonp,以获得正确的 json 对象。

var lat = -1.146334;
var longi = 51.240156;


$.getJSON( 'http://www.mapquestapi.com/geocoding/v1/reverse?key=**YOURKEY**&callback=renderReverse&json&location=' + lat + ',' + longi, format: "jsonp" )
.done(function( geo ) 

 $('#location').html(geo.results[0].locations[0].adminArea4);
)
.fail(function( jqxhr, textStatus, error ) 
var err = textStatus + ", " + error;
console.log( "Request Failed: " + err );
);

【讨论】:

以上是关于无法从 MapQuest API 返回的 JSON 中检索值的主要内容,如果未能解决你的问题,请参考以下文章

Mapquest 的 JSON 响应不正确 - Android 应用

使用 MapQuest Directions API 从用户地理位置创建路线

从 python 列表中删除邮政编码(从 MapQuest 输出中获取州名)

json mapquest openapi

无法从使用 C# 的 API 获得 json 响应

C# 无法从 API 调用读取 json 响应