【问题标题】:How to remove whole JSON objects?如何删除整个 JSON 对象?
【发布时间】:2021-03-23 21:18:32
【问题描述】:

我有一个数千行的 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"
                     }
         }
         
]

}

谁能帮我解决这个问题?提前致谢!

【问题讨论】:

  • 我认为您需要删除区域列表中对该字典对象的引用。所以像del areas[1]
  • 为此使用熊猫。它是高性能的 + 您将为此获得一个班轮代码
  • @DavidYue 好吧,不要在迭代时修改。
  • @tbhaxor 在纯 python 中实现这个非常简单。获得“一个班轮”是做事的一个非常糟糕的理由,但如果你愿意,你也可以用“一个班轮”来做到这一点
  • 无论如何,你可以做类似data['areas'] = [a for a in data['areas'] if a["data"]["Economic_risk] != ""]

标签: python json parsing


【解决方案1】:

问题是你只是用多个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)

【讨论】:

    猜你喜欢
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-17
    • 2013-10-12
    相关资源
    最近更新 更多