python - 如何删除整个 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"
}
}
]
}
谁能帮我这个?提前致谢!
解决方案
问题是你只是用多个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)
推荐阅读
- sql - 如何在不加载数据的情况下使用 Spark Scala 创建与 Oracle 的连接?
- c# - 从 XML 数据返回类型 T 的对象
- java - java.io.IOException: toDerInputStream 拒绝标签类型 77
- java - 为什么 CrudRepository.save() 在返回创建的对象时忽略 FetchType.EAGER?
- r - 在 RShiny 中增加基图的边距(不考虑 par() 的参数)
- android - AndroidTV raw 特别关注
- javascript - 使用 JavaScript 或 alpineJS 创建重复的表单元素
- python - 使用 treetagger 时出错:列表索引超出范围
- python - 创建自定义类副本的有效方法
- java - 在Java中的整数数组列表中找到最小值的递归函数