我正在努力解决这个问题。我有一个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)
然后添加数据:
但是怎么做呢?
这应该是一个有趣的一个为你熟练的活套。;-)
我只为第一个对象收集密钥,然后假设其余的格式是一致的。
下面的代码还将嵌套对象限制为仅一个;您没有指定当存在多个对象时应该发生什么。有两个或多个长度相等的嵌套结构可以工作(您可以将这些结构“压缩”在一起),但如果您有不同长度的结构,则需要明确选择如何处理这些结构;使用空列压缩以填充这些结构,或者写出这些条目的乘积(A x B行,每次找到B条目的时候重复A中的信息)。
对于您的示例输入,这将产生:
相关问题 更多 >
编程相关推荐