用于json打印的嵌套循环

时间:2014-08-09 17:09:10

标签: python python-3.x json

我试图打印使用jason.loads制作的这个python对象的LineRef。

{
    "Siri": {
        "ServiceDelivery": {
            "ResponseTimestamp": "2014-08-09T12:07:08.519-04:00",
            "VehicleMonitoringDelivery": [
                {
                    "VehicleActivity": [
                        {
                            "MonitoredVehicleJourney": {
                                "LineRef": "MTA NYCT_B38",
                            }
                        }
                    ]
                }
            ]
        }
    }
}

到目前为止,我已经编写了这段代码:

theJSON = json.loads(data)
for j in theJSON["VehicleMonitoringDelivery"]:
    for i in theJSON["VehicleActivity"]:
        print  [i]["MonitoredVehicleJourney"]["LineRef"]

但它在JSON上给出了错误

1 个答案:

答案 0 :(得分:0)

您无法直接处理VehicleMonitoringDelivery密钥,它嵌套在ServiceDelivery词典中嵌套的Siri中:

theJSON = json.loads(data)
for delivery in theJSON['Siri']['ServiceDelivery']['VehicleMonitoringDelivery']:
    for activity in delivery['VehicleActivity']:
        print activity['MonitoredVehicleJourney']['LineRef']

或使用索引获取第一个(如果列表为空,则可能失败:

theJSON = json.loads(data)
try:
    delivery = theJSON['Siri']['ServiceDelivery']['VehicleMonitoringDelivery'][0]
    activity = delivery['VehicleActivity'][0]
except IndexError:
    print 'None-such'
else:
    print activity['MonitoredVehicleJourney']['LineRef']

演示:

>>> theJSON = {
...     "Siri": {
...         "ServiceDelivery": {
...             "ResponseTimestamp": "2014-08-09T12:07:08.519-04:00",
...             "VehicleMonitoringDelivery": [
...                 {
...                     "VehicleActivity": [
...                         {
...                             "MonitoredVehicleJourney": {
...                                 "LineRef": "MTA NYCT_B38",
...                             }
...                         }
...                     ]
...                 }
...             ]
...         }
...     }
... }
>>> for delivery in theJSON['Siri']['ServiceDelivery']['VehicleMonitoringDelivery']:
...     for activity in delivery['VehicleActivity']:
...         print activity['MonitoredVehicleJourney']['LineRef']
... 
MTA NYCT_B38