2015-06-20 99 views
0

我想遍歷下面的Containers的每個字典,併爲每個字段提取信息,因爲它與頂級字典相關,下面的代碼僅循環訪問最後一個字典。我怎樣才能解決這個問題,以循環所有字典?如何循環遍歷多級json

JSON:

{ 
    "MetaData": {}, 
    "SRData": { 
     "AddressVerified": "Y", 
        "SRNumber": "1-19066631", 
        "CreatedDate": "06/17/2015 07:22:16", 
        "UpdatedDate": "06/19/2015 04:56:39", 
        "IntegrationId": "06172015072216272", 
        "Status": "Open", 
        "CreatedByUserLogin": "MYLA-SAN2", 
        "UpdatedByUserLogin": "MYLA-SAN2", 
        "Anonymous": "N", 
        "Zipcode": "90011", 
        "Latitude": "34.0258281427", 
        "Longitude": "-118.261080295", 
        "CustomerAccessNumber": "", 
        "LADWPAccountNo": "", 
        "NewContactFirstName": "fg", 
        "NewContactLastName": "ln", 
        "NewContactPhone": "455-455-4554", 
        "NewContactEmail": "", 
        "ParentSRNumber": "1-19048641", 
        "Priority": "Normal", 
        "Language": "English", 
        "ReasonCode": "", 
        "ServiceDate": "06/18/2015 00:00:00", 
        "Source": "Call", 
        "ClosedDate": "", 
        "Email": "", 
        "FirstName": "", 
        "HomePhone": "", 
        "LastName": "", 
        "LoginUser": "", 
        "ResolutionCode": "", 
        "SRUnitNumber": "", 
        "MobilOS": "", 
        "SRAddress": "601 E 22ND ST, 90011", 
        "SRAddressName": "", 
        "SRAreaPlanningCommission": "South Los Angeles APC", 
        "SRCommunityPoliceStation": "CENTRAL BUREAU", 
        "SRCouncilDistrictMember": "Curren D. Price Jr.", 
        "SRCouncilDistrictNo": "9", 
        "SRDirection": "E", 
        "SRNeighborhoodCouncilId": "78", 
        "SRNeighborhoodCouncilName": "SOUTH CENTRAL NC", 
        "SRStreetName": "22ND", 
        "SRSuffix": "ST", 
        "SRTBColumn": "E", 
        "SRTBMapGridPage": "634", 
        "SRTBRow": "7", 
        "SRXCoordinate": "6482570", 
        "SRYCoordinate": "1831887", 
        "AssignTo": "WH", 
        "Assignee": "", 
        "Owner": "BOS", 
        "ParentSRStatus": "Open", 
        "ParentSRType": "Service Not Complete", 
        "ParentSRLinkDate": "06/19/2015 04:56:39", 
        "ParentSRLinkUser": "MYLA-SAN2", 
        "SRAreaPlanningCommissionId": "9", 
        "SRCommunityPoliceStationAPREC": "NEWTON", 
        "SRCommunityPoliceStationPREC": "13", 
        "SRCrossStreet": "", 
        "ActionTaken": "SR Created", 
        "SRCity": "", 
        "RescheduleCounter": "", 
        "SRHouseNumber": "601", 
        "ContactSuppressEmailFlag": "Y", 
        "SourceofRequestCouncil": "", 
        "CCBPremiseType": "Multi Residential", 
        "ContainerBlackCount": "", 
        "ContainerBrownCount": "", 
        "SRIntersectionDirection": "", 
        "SRApproximateAddress": "N", 
        "ContainerGreenCount": "", 
        "OtherBureauName": "", 
        "AssigneeName": "", 
        "AssigneeOrganization": "", 
        "AnotherBureauEmailId": "", 
        "CCBPremiseId": "", 
     "ListOfLa311BulkyItem": {}, 
     "ListOfLa311DeadAnimalRemoval": {}, 
     "ListOfLa311BrushItemsPickup": {}, 
     "ListOfLa311Containers": { 
      "La311Containers": [ 
       { 
        "ContainerNumber": "", 
        "ContainerType": "Blue Recycling", 
        "DamageonLid": "", 
        "DamageonAxle": "", 
        "DamageonBody": "", 
        "DamageonWheels": "", 
        "DeliveryReason": "Private to City Service", 
        "DriverFirstName": "", 
        "DriverLastName": "", 
        "ExchangeDetails": "", 
        "GatedCommunityMultifamilyDwelling": "", 
        "MobileHomeSpace": "", 
        "PickupReason": "", 
        "RequestFor": "Delivery", 
        "ServiceDateRendered": "", 
        "TruckNo": "", 
        "Type": "Containers", 
        "CollectionLocation": "Curb", 
        "ContainerSize": "30 Gallon (Small) Blue", 
        "LastUpdatedBy": "", 
        "ActiveStatus": "Y", 
        "NameField1": "", 
        "NameField2": "", 
        "NameField3": "", 
        "NameField4": "", 
        "NumericValueField1": "", 
        "NumericValueField2": "", 
        "NumericValueField3": "", 
        "NumericValueField4": "", 
        "PurposeofSR": "", 
        "Name": "061720150722162721" 
       }, 
       { 
        "ContainerNumber": "2222222222222", 
        "ContainerType": "Black Refuse", 
        "DamageonLid": "", 
        "DamageonAxle": "", 
        "DamageonBody": "", 
        "DamageonWheels": "", 
        "DeliveryReason": "", 
        "DriverFirstName": "", 
        "DriverLastName": "", 
        "ExchangeDetails": "", 
        "GatedCommunityMultifamilyDwelling": "", 
        "MobileHomeSpace": "", 
        "PickupReason": "Abandoned", 
        "RequestFor": "Pickup", 
        "ServiceDateRendered": "", 
        "TruckNo": "", 
        "Type": "Containers", 
        "CollectionLocation": "Curb", 
        "ContainerSize": "90 Gallon (Large) Black", 
        "LastUpdatedBy": "", 
        "ActiveStatus": "Y", 
        "NameField1": "", 
        "NameField2": "", 
        "NameField3": "", 
        "NameField4": "", 
        "NumericValueField1": "", 
        "NumericValueField2": "", 
        "NumericValueField3": "", 
        "NumericValueField4": "", 
        "PurposeofSR": "", 
        "Name": "061720150722162722" 
       }, 
       { 
        "ContainerNumber": "", 
        "ContainerType": "Black Refuse", 
        "DamageonLid": "", 
        "DamageonAxle": "", 
        "DamageonBody": "", 
        "DamageonWheels": "", 
        "DeliveryReason": "Exchange", 
        "DriverFirstName": "", 
        "DriverLastName": "", 
        "ExchangeDetails": "", 
        "GatedCommunityMultifamilyDwelling": "", 
        "MobileHomeSpace": "", 
        "PickupReason": "", 
        "RequestFor": "Delivery", 
        "ServiceDateRendered": "", 
        "TruckNo": "", 
        "Type": "Containers", 
        "CollectionLocation": "Curb", 
        "ContainerSize": "60 Gallon (Regular) Black", 
        "LastUpdatedBy": "", 
        "ActiveStatus": "Y", 
        "NameField1": "", 
        "NameField2": "", 
        "NameField3": "", 
        "NameField4": "", 
        "NumericValueField1": "", 
        "NumericValueField2": "", 
        "NumericValueField3": "", 
        "NumericValueField4": "", 
        "PurposeofSR": "", 
        "Name": "061720150722162743" 
       }, 
       { 
        "ContainerNumber": "2222222222222", 
        "ContainerType": "Black Refuse", 
        "DamageonLid": "N", 
        "DamageonAxle": "Y", 
        "DamageonBody": "Y", 
        "DamageonWheels": "N", 
        "DeliveryReason": "", 
        "DriverFirstName": "", 
        "DriverLastName": "", 
        "ExchangeDetails": "", 
        "GatedCommunityMultifamilyDwelling": "", 
        "MobileHomeSpace": "", 
        "PickupReason": "", 
        "RequestFor": "Damage", 
        "ServiceDateRendered": "", 
        "TruckNo": "", 
        "Type": "Containers", 
        "CollectionLocation": "Curb", 
        "ContainerSize": "30 Gallon (Small) Black", 
        "LastUpdatedBy": "", 
        "ActiveStatus": "Y", 
        "NameField1": "", 
        "NameField2": "", 
        "NameField3": "", 
        "NameField4": "", 
        "NumericValueField1": "", 
        "NumericValueField2": "", 
        "NumericValueField3": "", 
        "NumericValueField4": "", 
        "PurposeofSR": "", 
        "Name": "061720150722162744" 
       } 
      ] 
     } 
    } 
} 

代碼:

import json 


CS = 'C:\Users\GIS\Desktop\containers.json' 
with open(CS) as data_file: 
    CSdata = json.load(data_file) 

items = [] 
for CSData in CSdata: 
    K_Containers = CSdata['SRData']['ListOfLa311Containers'] 
    K_Address = CSdata['SRData']['SRAddress'] 
    K_FirstName = "John" 
    K_Longitude = CSdata ['SRData']['Longitude'] 
    K_Latitude = CSdata['SRData']['Latitude'] 
    K_Reason =CSdata['SRData']['ReasonCode'] 
    K_ResolutionCode = '0' 


    k_uid = ' ' 
    k_container_type= ' ' 
    k_container_number = ' ' 
    k_delivery_reason = ' ' 
    k_damage_body = ' ' 
    k_damage_lid = ' ' 
    k_container_size = ' ' 
    k_axle_dam = ' ' 
    k_wheel_dam = ' ' 

    try: 
     for CSData in K_Containers: 
      for containers in K_Containers['La311Containers']: 
       containersize = containers['ContainerSize'] 
       if k_container_size != containersize: 
         k_container_size = containersize 
    except: 
     print "Pass" 



    try: 
     for sr in K_Containers: 
      container_type = containers ['ContainerType'] 
      if k_container_type != container_type: 
       k_container_type = container_type 

     for sr in K_Containers: 
      container_number = containers ['ContainerNumber'] 
      if k_container_number != container_number: 
       k_container_number = container_number 

     for sr in K_Containers: 
      deliverreason = containers ['DeliveryReason'] 
      if k_delivery_reason != deliverreason: 
       k_delivery_reason = deliverreason 

     for sr in K_Containers: 
      axle_damage = containers['DamageonAxle'] 
      if k_axle_dam != axle_damage: 
       k_axle_dam = axle_damage 

     for sr in K_Containers: 
      body_damage = containers ['DamageonBody'] 
      if k_damage_body != body_damage: 
       k_damage_body = body_damage 

     for sr in K_Containers: 
      lid_damage = containers ['DamageonLid'] 
      if k_damage_lid != lid_damage: 
       k_damage_lid = lid_damage 

     for sr in K_Containers: 
      wheel_damage = containers ['DamageonWheels'] 
      if k_wheel_dam != wheel_damage: 
       k_damage_lid = wheel_damage 

     for sr in K_Containers: 
      uid = containers ['Name'] 
      if k_uid != uid: 
       k_uid = uid 

    except: 
     print ("Pass") 



    print k_uid 

輸出:

061720150722162744 
061720150722162744 

所需的輸出:

061720150722162721 
061720150722162722 
061720150722162743 
061720150722162744 
+0

輸出是你想要的輸出嗎? –

+0

不,我想我的輸出是來自每個字典的項目,那個來自上一個字典 – geoffreyGIS

回答

2

問題是您當前的k_uid變量和print k_uid命令在循環遍歷容器的容器循環之外。

要打印您所需的輸出,你需要像下面這樣的循環:

for container in K_Containers['La311Containers']: 
    print container['Name'] 

在一個獨立的情況下,從您的其他循環,這將是這樣的:

K_Containers = CSdata['SRData']['ListOfLa311Containers'] 
for CSData in K_Containers 
    for container in K_Containers['La311Containers']: 
     print container['Name'] 

另一種方法是創建一個k_uids數組並將每個k_uid的值附加到它,以便您可以在最後訪問它們。