【问题标题】:How to remove empty key/value pairs from JSON in Python如何在 Python 中从 JSON 中删除空键/值对
【发布时间】:2015-07-12 00:06:43
【问题描述】:

我正在使用要发送到服务器的键/值对构造一个 JSON,如果 Name 字段为空且 Item_2 字段小于 0,那么我想删除 Name 字段.

我正在使用最多 10 个嵌套字典,但只有字典 2-10 或 1-9[indexed] 符合此条件。

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})

lResults 转储为 JSON 的结果,我想删除我想构造条件的所有键:

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

具有空白名称字段的 lResults 的 JSON

{
            "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"
                        }

【问题讨论】:

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

标签: python json dictionary


【解决方案1】:

这是解决您的问题的一种方法:在您完成构建 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']

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-03-10
    • 1970-01-01
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 2016-03-03
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多