我正在尝试将一个嵌套的JSON对象文件转换为CSV。 下面是JSON的示例
{
"total_hosts" : [
{
"TYPE" : "AGENT",
"COUNT" : 6
}
],
"installed" : [
{
"ID" : "admin-4.0",
"VERSION" : 4,
"ADDON_NAME" : "Administration"
},
{
"ID" : "admin-2.0",
"VERSION" : 2,
"ADDON_NAME" : "Administration"
},
{
"ID" : "ch-5.0",
"VERSION" : "5",
"ADDON_NAME" : "Control Host"
}
],
"virtual_machine" : [
{
"COUNT" : 4,
"TYPE" : "VM"
}
TYPE,COUNT,ID,VERSION这些都是列,但问题是不是每个对象都有值,有些对象有1个对象有这些值,有些对象有更多的值,所以我写在行中,所以当该列没有值时,我试图写空白。在
将其写入CSV的代码
^{pr2}$我得到了Index out of range
错误,我甚至尝试了True
/False
条件。在
有人能帮我吗?在
更新:预期输出:
TYPE,COUNT,ID,VERSION,ADDON_NAME,COUNT,TYPE
AGENT,6,admin-4.0,4,Administration,4,VM
, ,admin-2.0,2,Administration, ,
, ,cd-5.0,5,Control Host, ,
所以基本上,当列没有值时,我需要空格。在
问题修改:输出:
AGENT,6,,,
, ,admin-4.0,4,Administration
, ,admin-2.0,2,Administration
, ,ch-5.0,5,Control Host
预期产量:
AGENT,6,admin-4.0,4,Administration
, ,admin-2.0,2,Administration
, ,ch-5.0,5,Control Host
更新:我甚至试过了
row.append(str(entry.get('TYPE', '')))
row.append(str(entry.get('COUNT', '')))
row.append(str(entry.get('ID', '')))
row.append(str(entry.get('VERSION', '')))
row.append(str(entry.get('ADDON_NAME', '')))
writer.writerow(row)
仍然得到和上面一样的输出。:(
这里有两个错误:
使用
decoded['installed']
的长度生成一个索引,然后用于decoded['total_hosts']
列表。这将生成索引错误,因为decoded['total_hosts']
没有那么多条目。访问不存在的键将抛出} method 来检索值或默认值。
KeyError
;使用^{直接在列表上循环简单得多,无需生成索引:
您可以将其扩展到处理多个键:
^{pr2}$如果需要组合两个条目的输出,请使用^{} 将列表配对,并在较短的列表用完时使用默认值:
这使得三个列表中的任何一个都比其他列表短。在
对于2.6之前的Python版本(添加了
^{4}$itertools.izip_longest
),您必须假设installed
总是最长的,然后使用:相关问题 更多 >
编程相关推荐