Python - 从 JSON 响应中提取数据(使用 TomTom api)

Posted

技术标签:

【中文标题】Python - 从 JSON 响应中提取数据(使用 TomTom api)【英文标题】:Python - extracting data from JSON response (using TomTom api) 【发布时间】:2018-01-08 17:19:33 【问题描述】:

我正在尝试使用TomTom API 检索有关路线时间的信息。

通过提供 API url、API 密钥 (that you can get by registering) 以及我想返回旅行时间的来源和目的地纬度/经度。

我认为我从响应中获得了字典字典,并且应该能够使用 - jsonTomTomString['routes']['summary']['travelTimeInSeconds'] 访问数据

但我得到...

TypeError: 列表索引必须是整数,而不是 str

我的代码如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-

import ConfigParser
import requests
import json
import sys
import time
import datetime

from urllib import urlopen

# URL to the tomtom api
apiURL      = "https://api.tomtom.com/routing/1/calculateRoute/"
# apiKey
apiKey      = "get this from link in description"

#[coordinates]
sourceLat   = 51.5560241
sourceLon   = -0.2817075
destLat     = 53.4630621
destLon     = -2.2935288

tomtomURL = "%s/%s,%s:%s,%s/json?key=%s" % (apiURL,sourceLat,sourceLon,destLat,destLon,apiKey)

getData = urlopen(tomtomURL).read()
jsonTomTomString = json.loads(getData)

totalTime = jsonTomTomString['routes']['summary']['totalTimeSeconds']

print ("time to destination is: ", totalTime)

JSON 响应如下所示...

"formatVersion":"0.0.12","copyright":"版权 2018 TomTom 国际BV。版权所有。该导航数据是 TomTom International BV 的专有版权,仅可使用 根据完全执行的许可协议的条款 TomTom International BV 或授权的 经销商和您自己。如果您尚未签订此类许可 同意您无权以任何方式使用这些数据,并且 应立即将其退还给 TomTom International BV.","privacy":"TomTom 保存的信息告诉我们如何以及何时 您使用我们的服务。这包括有关您的设备的信息 正在使用以及我们在您使用服务时收到的信息, 例如位置、路线、目的地和搜索查询。汤姆汤姆是 无法根据其收集的信息识别您的身份,并将 不要尝试。 TomTom 使用这些信息进行技术诊断,以 检测欺诈和滥用,创建使用报告,并改进其 服务。信息仅用于这些目的并用于 有限的时间,然后销毁。 TomTom 适用 基于行业标准的安全方法来保护 防止未经授权的访问的信息。 TomTom 不会给任何人 否则访问信息或将其用于任何其他目的,除非 根据正当法律程序,明确和合法地命令这样做。 您可以通过http://tomtom.com/privacy 了解更多信息。您可以联系 TomTom 去 http://tomtom.com/support.","routes":["summary":"lengthInMeters":326856,"travelTimeInSeconds":13018,"trafficDelayInSeconds":818,"departureTime":"2018-01-08T17:10:31Z" ,"arrivalTime":"2018-01-08T20:47:28Z","legs":["summary":"lengthInMeters":326856,"travelTimeInSeconds":13018,"trafficDelayInSeconds":818,"departureTime" :"2018-01-08T17:10:31Z","arrivalTime":"2018-01-08T20:47:28Z","points":["latitude":51.55598,"longitude":-0.28216, "latitude":51.55601,"longitude":-0.28292,"latitude":51.55602,"longitude":-0.28384,"latitude":51.55602,"longitude":-0.28395,"latitude": 51.55602,"经度":-0.28442,"纬度":51.55603,"经度":-0.28493,"纬度":51.55603,"经度":-0.28564,"纬度":51.55603,"经度" :-0.28611,

感谢您帮助解决此问题。

【问题讨论】:

【参考方案1】:

我在"routes": 之后看到一个[,所以 routes 是一个数组。

试试jsonTomTomString['routes'][0]['summary']['totalTimeSeconds']

【讨论】:

我也没有在 JSON 中看到“totalTimeSeconds”,除非它在截止之后的某个地方。所以应该是jsonTomTomString['routes'][0]['summary']['travelTimeInSeconds']

以上是关于Python - 从 JSON 响应中提取数据(使用 TomTom api)的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 提取嵌套列

如何使用JMETER从JSON响应中提取数据

JMeter--关联(jion提取器与边界提取器)

从 Tone Analyser 的 JSON 响应中的字典列表中提取数据 [重复]

如何使用 Guzzle 和 Laravel 从 JSON 响应中提取单个数组值

jmeter中用json提取器提取响应数据中的多个值