首页 > 解决方案 > 如何删除整个 JSON 对象?

问题描述

我有一个数千行的 JSON 文件,但这里是该文件的一个简短示例。

{
    "dataset_id": "??",
    "areas": [
         {
             "boundary_id": "76",
             "metric": 1.9,
             "data": {
                  "Economic_risk": "1.9",
                  "Housing_risk": "3.0"
                     }
         },
         { 
             "boundary_id": "76",
             "metric": NaN,
             "data": {
                  "Economic_risk": "",
                  "Housing_risk": ""
                     }
         }
]
}

我的目标是删除具有 NaN 度量的数据集的每个部分,这意味着风险是“”。现在我正在这样做,但这并没有摆脱一切。

import json

with open(test.json) as file:
    data = json.load(file)

    for area in data["areas"]:
        if area["data"]["Economic_risk] == "":
             del area["boundary_id"]
             del area["metric"]
             del area["data"]["Economic_risk"]
             del area["data"]["Housing_risk"]
             del area["data"]
with open("test_new.json", "w") as file:
      json.dump(data, file)

这给了我

   {
        "dataset_id": "??",
        "areas": [
             {
                 "boundary_id": "76",
                 "metric": 1.9,
                 "data": {
                      "Economic_risk": "1.9",
                      "Housing_risk": "3.0"
                         }
             },
             { 

             }
    ]
    }

但是我想要的输出是这样的

{
    "dataset_id": "??",
    "areas": [
         {
             "boundary_id": "76",
             "metric": 1.9,
             "data": {
                  "Economic_risk": "1.9",
                  "Housing_risk": "3.0"
                     }
         }
         
]

}

谁能帮我这个?提前致谢!

标签: pythonjsonparsing

解决方案


问题是你只是用多个del area[key]语句清除字典......但这并没有从该列表中删除字典。相反,只需使用以下条件将其过滤掉:

import json

with open(test.json) as file:
    data = json.load(file)

data['areas'] = [a for a in data['areas'] if a["data"]["Economic_risk"]]

with open("test_new.json", "w") as file:
      json.dump(data, file)

推荐阅读