【发布时间】:2013-12-23 20:07:00
【问题描述】:
我正在努力解决这个问题。我有一个 JSON 文件,需要将其输出到 CSV,如果结构是扁平的,没有深层嵌套项,那就没问题了。
但在这种情况下,嵌套的 RACES 把我搞砸了。
我将如何以如下格式获取数据:
VENUE, COUNTRY, ITW, RACES__NO, RACES__TIME
对于每个对象和对象中的每个种族?
{
"1": {
"VENUE": "JOEBURG",
"COUNTRY": "HAE",
"ITW": "XAD",
"RACES": {
"1": {
"NO": 1,
"TIME": "12:35"
},
"2": {
"NO": 2,
"TIME": "13:10"
},
"3": {
"NO": 3,
"TIME": "13:40"
},
"4": {
"NO": 4,
"TIME": "14:10"
},
"5": {
"NO": 5,
"TIME": "14:55"
},
"6": {
"NO": 6,
"TIME": "15:30"
},
"7": {
"NO": 7,
"TIME": "16:05"
},
"8": {
"NO": 8,
"TIME": "16:40"
}
}
},
"2": {
"VENUE": "FOOBURG",
"COUNTRY": "ABA",
"ITW": "XAD",
"RACES": {
"1": {
"NO": 1,
"TIME": "12:35"
},
"2": {
"NO": 2,
"TIME": "13:10"
},
"3": {
"NO": 3,
"TIME": "13:40"
},
"4": {
"NO": 4,
"TIME": "14:10"
},
"5": {
"NO": 5,
"TIME": "14:55"
},
"6": {
"NO": 6,
"TIME": "15:30"
},
"7": {
"NO": 7,
"TIME": "16:05"
},
"8": {
"NO": 8,
"TIME": "16:40"
}
}
}, ...
}
我想像这样将其输出到 CSV:
VENUE, COUNTRY, ITW, RACES__NO, RACES__TIME
JOEBERG, HAE, XAD, 1, 12:35
JOEBERG, HAE, XAD, 2, 13:10
JOEBERG, HAE, XAD, 3, 13:40
...
...
FOOBURG, ABA, XAD, 1, 12:35
FOOBURG, ABA, XAD, 2, 13:10
所以首先我得到正确的密钥:
self.keys = self.data.keys()
keys = ["DATA_KEY"]
for key in self.keys:
if type(self.data[key]) == dict:
for k in self.data[key].keys():
if k not in keys:
if type(self.data[key][k]) == unicode:
keys.append(k)
elif type(self.data[key][k]) == dict:
self.subkey = k
for sk in self.data[key][k].values():
for subkey in sk.keys():
subkey = "%s__%s" % (self.subkey, subkey)
if subkey not in keys:
keys.append(subkey)
然后添加数据:
但是怎么做呢?
对于熟练的forloopers来说,这应该是一件有趣的事情。 ;-)
【问题讨论】:
-
json2csv 呢?
-
我想我可以试试,谢谢你的链接
-
这必须是通用的吗?我会为此编写一个特定于格式的转换。
-
是的,它是通用的,我希望能够解析任何像示例这样具有深层嵌套的 json 文件
-
@Harry:什么,任何级别的嵌套?