【发布时间】:2016-06-05 08:57:58
【问题描述】:
我有一个包含以下内容的 CSV 文件:
District,Zone,Geographical Region,Development Region,Causalities,In Number
Sindhupalchok,Bagmati,Mountain,Central,Total No. of Houses,66688
Sindhupalchok,Bagmati,Mountain,Central,Total Population,287798
Sindhupalchok,Bagmati,Mountain,Central,Dead Male,1497
Sindhupalchok,Bagmati,Mountain,Central,Dead Female,1943
Kathmandu,Bagmati,Hill,Central,Total No. of Houses,436344
Kathmandu,Bagmati,Hill,Central,Total Population,1744240
Kathmandu,Bagmati,Hill,Central,Dead Male,621
Kathmandu,Bagmati,Hill,Central,Dead Female,600
我的目标是从中生成一个这样的 JSON 对象:
{
"district":{
"Sindhupalchok":{
"Causalities":{
"Total No. of Houses":66688,
"Total Population":287798,
"Dead Male":1497,
"Dead Female":1943
},
"geoInfo":{
"Zone":"Bagmati",
"geography":"Mountain",
"Dev Region":"Central"
}
},
"Kathmandu":{
"Causalities":{
"Total No. of Houses":436344,
"Total Population":1744240,
"Dead Male":621,
"Dead Female":600
},
"geoInfo":{
"Zone":"Bagmati",
"geography":"Hill",
"Dev Region":"Central"
}
}
}
}
我尝试使用 csv.DictReader(csvfile, fieldnames),但它会在 JSON 中生成冗余节点,难以解析且不必要地冗长。
我正在使用 python 2.x 这是我迄今为止的尝试:
>>> csvData = open('data.csv','rb')
>>> fieldnames = ("district", "zone", "geographicalRegion", "developmentRegion", "causalities", "injuredNumber")
>>> reader = csv.DictReader(csvData, fieldnames)
>>> rawJson = json.dumps([ row for row in reader ])
rawJson 不是我一直在寻找的那个。它只是将字段名映射到各个数据集。
所以问题是:如何在没有冗余节点的情况下创建这个 JSON 对象?
【问题讨论】:
-
你能展示你试过的代码吗?
-
@glibdud 我已经添加了我尝试过的代码。
-
由于 CSV 和 JSON 数据不存在任何类型的 1:1 关系,您将需要遍历 CSV 数据并更手动地构建结构。只需将其构建为 dict,然后最后将其转储为 JSON。
标签: python json python-2.7 csv