Mapquest Directions Optimized Route API JSON解析失败问题求助
Mapquest Directions API 优化路线请求失效排查与解决
问题概述
长期使用Mapquest Directions API获取优化路线的功能突然失效,未修改原有GET请求格式,但API返回错误:
Illegal argument from request: Error parsing JSON provided by HTTP Request.
原有请求示例(经纬度定位,非标准JSON格式):
https://www.mapquestapi.com/directions/v2/optimizedroute?key=KEY&json={locations:[{latLng:{lat:39.739236,lng:-104.990251}},{latLng:{lat:29.229902,lng:-96.273558}},{latLng:{lat:44.976497,lng:-93.253857}}],options:{doReverseGeocode:false,narrativeType:none}}
API密钥有效,代入官方提供的地址格式示例可正常运行:
https://www.mapquestapi.com/directions/v2/optimizedroute?key=KEY&json={"locations":["Denver,CO","Westminster,CO","Boulder,CO"]}
尝试给JSON参数添加双引号后,请求可被处理,但路线顺序完全错误,推测经纬度未被正确识别。
原因分析
- JSON格式不规范:原有请求中的JSON未给键名添加双引号,属于非标准JSON格式。Mapquest API可能更新了JSON解析器,现在严格遵循RFC 8259标准,导致无引号的JSON无法被解析,触发解析错误。
- 经纬度参数结构错误:添加引号后路线顺序异常,是因为部分参数格式仍不符合官方要求(比如
narrativeType:none未给none加双引号),导致API无法正确识别经纬度坐标,进而错误执行路线优化逻辑。
解决方法
1. 使用标准JSON格式传递参数
确保JSON中所有键名(locations、latLng、lat、lng、options等)和字符串类型的值(如"none")都添加双引号,布尔值(false)保持原样。修正后的JSON结构如下:
{ "locations": [ {"latLng": {"lat": 39.739236, "lng": -104.990251}}, {"latLng": {"lat": 29.229902, "lng": -96.273558}}, {"latLng": {"lat": 44.976497, "lng": -93.253857}} ], "options": {"doReverseGeocode": false, "narrativeType": "none"} }
2. 对JSON参数进行URL编码
GET请求中的JSON包含特殊字符({}、:、,等),必须进行URL编码才能被正确解析。将上述标准JSON编码后,完整请求示例如下:
https://www.mapquestapi.com/directions/v2/optimizedroute?key=KEY&json=%7B%22locations%22%3A%5B%7B%22latLng%22%3A%7B%22lat%22%3A39.739236%2C%22lng%22%3A-104.990251%7D%7D%2C%7B%22latLng%22%3A%7B%22lat%22%3A29.229902%2C%22lng%22%3A-96.273558%7D%7D%2C%7B%22latLng%22%3A%7B%22lat%22%3A44.976497%2C%22lng%22%3A-93.253857%7D%7D%5D%2C%22options%22%3A%7B%22doReverseGeocode%22%3Afalse%2C%22narrativeType%22%3A%22none%22%7D%7D
3. 验证参数有效性
将替换有效API密钥后的请求在浏览器或API测试工具中运行,检查返回的route字段,确认路线顺序符合预期。若仍有问题,可通过Mapquest官方开发者工具逐步调试参数结构。
内容的提问来源于stack exchange,提问作者user1519884
相关产品推荐
相关产品推荐

