【发布时间】:2023-03-19 16:46:01
【问题描述】:
我正在尝试将嵌套的 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 的代码
json_input = open('all.json')
try:
decoded = json.load(json_input)
# tell computer where to put CSV
outfile_path='Path to CSV'
# open it up, the w means we will write to it
writer = csv.writer(open(outfile_path,'w'))
for index in range(len(decoded['installed'])):
row = []
if decoded['total_hosts'][index]['TYPE'] is None:
row.append(str(''))
else:
row.append(str(decoded['total_hosts'][index]['TYPE']))
if decoded['total_hosts'][index]['COUNT'] is None:
row.append(str(''))
else:
row.append(str(decoded['total_hosts'][index]['COUNT']))
writer.writerow(row)
我收到Index out of range 错误,我什至尝试了True/False if 的条件。
谁能帮我解决这个问题?
更新:预期输出:
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)
仍然得到与上面相同的输出。 :(
【问题讨论】:
-
您的
installed和total_hosts列表的长度不同;您正在循环range(len(decoded['installed'])),然后使用decoded['total_hosts']和decoded['_hosts']列表中的索引(后者可能是一个错字)。 -
您应该包含输入和预期输出的完整示例。
-
是的,它是错字 :) 实际上我想为文件中的所有元素循环它,但由于它们是单独的对象/数组,所以我采用最大数量元素的数组并循环它,并且这就是为什么我设置 IF 条件,所以如果没有值,它应该附加空格。所以我可以维护列结构。
-
@user3520135:是
decoded['total_hosts'][index]操作引发了异常,没有尝试访问['TYPE'](这会引发KeyError异常)。
标签: python arrays json object csv