2015-07-12 196 views
0

我正在构建一个JSON与键/值对,我发送到服务器,如果Name字段为空和Item_2字段是< 0,那么我会喜欢删除Name字段。如何从Python中的JSON删除空的键/值对

我正在使用多达10个嵌套字典,但只有字典2-10或1-9 [索引]才符合此标准。

lResults是我的结果的列表,它被倾倒到JSON格式,当我打印lResults[0]['SRData']['ListOfLa311DeadAnimalRemoval']['DeadAnimalRemoval'][0]['Name']只值打印,而且我没有看到空字符串,但是当lResults转储到一个JSON我看空的字符串。

10个字典中的每个字典中的变量都可能是也可能不是空白的,但是我发送此JSON的服务器要么是期望名称字段,要么没有,并且名称字段对每个字典都是唯一的。

这是我的代码;

dL311 = dict() 
    d = dict() 
    d.setdefault("DriverFirstName",last_edited_user) 
    d.setdefault("DriverLastName","Aguilar") 
    d.setdefault("LastUpdatedBy", "SANSTAR1") 
    d.setdefault("DACType", dar_item_1) 
    d.setdefault("Type", "Dead Animal Removal") 
    d.setdefault("Name", dar_uid_1) 
    d.setdefault("DACItemCount", dar_qyt_1) 
    l311.append(d) 
    dL311 = dict() 
    d = dict() 
    d.setdefault("DriverFirstName",last_edited_user) 
    d.setdefault("DriverLastName","Aguilar") 
    d.setdefault("LastUpdatedBy", "SANSTAR1") 
    d.setdefault("DACType", dar_item_2) 
    d.setdefault("Type", "Dead Animal Removal") 
    d.setdefault("Name", dar_uid_2) 
    d.setdefault("DACItemCount", dar_qyt_2) 
    l311.append(d) 
    d = dict() 
    d.setdefault("DriverFirstName",last_edited_user) 
    d.setdefault("DriverLastName","Aguilar") 
    d.setdefault("LastUpdatedBy", "SANSTAR1") 
    d.setdefault("DACType", dar_item_3) 
    d.setdefault("Type", "Dead Animal Removal") 
    d.setdefault("Name", dar_uid_3) 
    d.setdefault("DACItemCount", dar_qyt_3) 
    l311.append(d) 
    d = dict() 
    d.setdefault("DriverFirstName",last_edited_user) 
    d.setdefault("DriverLastName","Aguilar") 
    d.setdefault("LastUpdatedBy", "SANSTAR1") 
    d.setdefault("DACType", dar_item_4) 
    d.setdefault("Type", "Dead Animal Removal") 
    d.setdefault("Name", dar_uid_4) 
    d.setdefault("DACItemCount", dar_qyt_4) 
    l311.append(d) 
    d = dict() 
    d.setdefault("DriverFirstName",last_edited_user) 
    d.setdefault("DriverLastName","Aguilar") 
    d.setdefault("LastUpdatedBy", "SANSTAR1") 
    d.setdefault("DACType", dar_item_5) 
    d.setdefault("Type", "Dead Animal Removal") 
    d.setdefault("Name", dar_uid_5) 
    d.setdefault("DACItemCount", dar_qyt_5) 
    l311.append(d) 
dL311 = dict() 
     dL311.setdefault("DeadAnimalRemoval", l311) 
     dResult.setdefault("ListOfLa311DeadAnimalRemoval",dL311) 
     lResults.append({"MetaData": {}, "SRData": dResult}) 

结果倾倒的JSON lResults的,我想删除所有的键,我想构造一个指明了condtion:

if "Name" == " " and DacItemCount < 0: 
then remove `Name` key and value 

JSON lResults的空白名称字段

{ 
      "MetaData": {}, 
      "SRData": { 
       "ListOfLa311DeadAnimalRemoval": { 
        "DeadAnimalRemoval": [ 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": "070920151120552101", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         } 
        ] 
       }, 
       "ReasonCode": "", 
       "ResolutionCode": "A", 
       "SRNumber": "1-20979921" 
      } 
     } 
    ] 
    [ 
     { 
      "MetaData": {}, 
      "SRData": { 
       "ListOfLa311DeadAnimalRemoval": { 
        "DeadAnimalRemoval": [ 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": "070920151119458601", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         }, 
         { 
          "DACItemCount": "0", 
          "DACType": " ", 
          "DriverFirstName": "Esri_Anonymous", 
          "DriverLastName": "Aguilar", 
          "LastUpdatedBy": "SANSTAR1", 
          "Name": " ", 
          "Type": "Dead Animal Removal" 
         } 
+0

你真的可以用一个函数来组织这个;这样,字典的过滤和生成就在一两个地方。 – Makoto

回答

0

以下是解决问题的一种方法:在完成构建l311列表后,按照您的标准浏览每个项目(字典)并删除键:

l311 = [ 
    dict(
     DriverFirstName=last_edited_user, 
     DriverLastName='Aguilar', 
     LastUpdatedBy='SANSTAR1', 
     DACType=dar_item_1, 
     Type='Dead Animal Removal', 
     Name=dar_uid_1, 
     DACItemCount=dar_qyt_1), 
    dict(
     DriverFirstName=last_edited_user, 
     DriverLastName='Aguilar', 
     LastUpdatedBy='SANSTAR1', 
     DACType=dar_item_2, 
     Type='Dead Animal Removal', 
     Name=dar_uid_2, 
     DACItemCount=dar_qyt_2), 
    dict(
     DriverFirstName=last_edited_user, 
     DriverLastName='Aguilar', 
     LastUpdatedBy='SANSTAR1', 
     DACType=dar_item_3, 
     Type='Dead Animal Removal', 
     Name=dar_uid_3, 
     DACItemCount=dar_qyt_3), 
    # ... 
] 

for d in l311: 
    if not d['Name'].strip() and d['DACItemCount'] < 0: 
     del d['Name'] 
     del d['DACItemCount']