Python只返回JSON键,但不返回值

时间:2017-11-07 22:34:05

标签: python json python-3.x

我正在使用铁路API返回有关每列火车的JSON数据,例如方向,速度,位置,目的地等。

我正在编写一个简单的函数,它只返回按照我指定的方向行驶的列车。我试图在for循环中这样做。

def getAllTrainsMatchingCriteria(line, direction):
     url = 'http://api.example.com/developer/api/v2/vehiclesbyroute?api_key=key&route='+line+'&format=json'
    try:
        response = (requests.get(url)).json()
    except:
        print('Unable to connect to API endpoint.')

    # Parse Data
    for trip in response['direction']:
        if trip['direction_name'] == direction:
            trains = []
            for train in trip['trip']:
                trains += train
            return trains

以下是我正在使用的数据示例:

{
    "route_id": "Route",
    "route_name": "Route",
    "route_type": "2",
    "mode_name": "Commuter Rail",
    "direction": [
        {
        "direction_id": "0",
        "direction_name": "Outbound",
        "trip": [
            {
                "trip_id": "Train-800-Weekday",
                "trip_name": "8:00 Train from City",
                "trip_headsign": "Destination",
                "vehicle": {
                    "vehicle_id": "1701",
                     "vehicle_lat": "42.0341186523438",
                     "vehicle_lon": "-71.2189483642578",
                     "vehicle_bearing": "216",
                     "vehicle_speed": "0",
                     "vehicle_timestamp": "1510092937",
                     "vehicle_label": "1818"
                }
            },
            {
             "another example train"
            },
            {
             "another train, etc."
            }
        ]
    }
}

如果我在for循环中将火车打印到控制台,我会看到符合我预期的所有列车,并且数据结构正确。

如果我在for循环后打印或返回列车,我看到的只是一组键,例如trip_id,trip_name等。没有值或其他数据。

在这个例子中,只有一列火车符合我的标准,但是假设有3辆火车。我怎样才能让所有三列火车全部完好无损?

2 个答案:

答案 0 :(得分:0)

return一次存在该方法,您应该将其放在for - 循环之后。接下来,使用字典trains展开列表train,这意味着将train的所有键附加到列表中:

def getAllTrainsMatchingCriteria(line, direction):
    url = 'http://api.example.com/developer/api/v2/vehiclesbyroute?api_key=key&route={}&format=json'.format(line)
    response = (requests.get(url)).json()

    # Parse Data
    trains = []
    for trip in response['direction']:
        if trip['direction_name'] == direction:
            trains.expand(trip['trip'])
    return trains

答案 1 :(得分:0)

好的,发布后几分钟,我发现另一个类似的例子,其中有人用.append()而不是+ =来添加每个项目。果然,这就是诀窍。

for trip in response['direction']:
    if trip['direction_name'] == direction:
        trains = []
        for train in trip['trip']:
            trains.append(train)
        return trains

我想我现在应该弄明白为什么。