requests.get().json() 返回的数据是一个数据列表。您可以使用for data in json_data: 循环遍历列表。然后您可以直接访问字典的“段”键。
#!/usr/bin/env python
import requests
url = 'http://calendar.voyages-sncf.com/cdp/api/proposals/v3/outward/FRPAR/FRGNL/2017-11-01/12-HAPPY_CARD/2/fr/fr?fareCodes=HC16&onlyDirectTrains=true'
json_data = requests.get(url).json()
for data in json_data:
print(data['segments'])
关于教程代码的问题:
import urllib.parse
import requests
address = 'lhr'
main_api = 'http://maps.googleapis.com/maps/api/geocode/json?'
url = main_api + urllib.parse.urlencode({'address': address})
json_data = requests.get(url).json()
json_status = json_data['status']
print(json_status)
google geocoding api here(他在视频中使用的 api)的文档指定您将获得具有特定架构的字典。但是,当您从 http://calendar.voyages-sncf.com/cdp/api 获取数据时,它们不会返回相同的数据结构。在他们的情况下,它是一个字典列表。
因此,每次您从不同的 api(或同一 api 中的不同端点)获取新数据时,您将获得不同结构的数据。因此,您需要更改代码以处理每条数据。
JSON 只是在通过网络发送字符串后将字典、列表或其他本地(本地为 python、java 或您当时使用的任何语言)更改为字符串的标准方法。这可能会导致问题。特别是在 python 中,set() 不能直接更改为 JSON。它需要先更改为列表,然后更改为 JSON,然后再更改为列表,然后再更改为另一侧的集合。
以下示例是从 google 文档 here 复制而来,稍作修改使其更小且更具可读性。
{
"results" : [
{
"address_components" : [
{
"long_name" : "1600",
"short_name" : "1600",
"types" : [ "street_number" ]
},
],
"formatted_address" : "1600 Amphitheatre Parkway, Mountain View, CA 94043, USA",
"geometry" : {
"location" : {
"lat" : 37.4224764,
"lng" : -122.0842499
},
"location_type" : "ROOFTOP",
"viewport" : {
"northeast" : {
"lat" : 37.4238253802915,
"lng" : -122.0829009197085
},
"southwest" : {
"lat" : 37.4211274197085,
"lng" : -122.0855988802915
}
}
},
"place_id" : "ChIJ2eUgeAK6j4ARbn5u_wAGqWA",
"types" : [ "street_address" ]
}
],
"status" : "OK"
}