【发布时间】:2017-12-10 03:17:25
【问题描述】:
我正在尝试使用 python 将具有多个数组和对象 json 的嵌套 json 转换为 CSV 文件。我尝试了很多方法,我得到了只有 1 个数组的 csvfile。我想打印许多内部具有唯一值的过滤器,所以我无法打印带有成本的第二个数组,我的示例 json 如下:
示例 JSON:
{
"breakdown":[
{
"filter":"tags",
"cost":5517.734,
"values":[
{
"count":13,
"subvalues":[
{
"count":1,
"subvalue":"BizOps-VM-20",
"cost":227.576
{
"count":4,
"subvalue":"<nulltagvalue>",
"cost":70.358
},
"subvalues":[
{
"count":2,
"subvalue":"cb",
"cost":4.584
}
],
"cost":4.584,
"value":"TagNewForTestw"
}
]
},
{
"filter":"account",
"cost":2954.905,
"values":[
{
"count":86,
"cost":1613.508,
"value":"628455167342"
},]
},
"time":[
{
"cost":112.793,
"time":"2017-05-16"
},
{
"cost":112.748,
"time":"2017-05-17"
},
{
"cost":112.739,
"time":"2017-05-18"
},
]
现在在这里我有时间数组,其中时间和成本在 json 中,我希望使用 python 代码在 csv 中打印,但是在尝试打印时,我得到 ###### 格式代替时间值。还有一件事是,即使在数组时间结束后,我也会重复打印时间值。
我的python代码:
import json
import csv
import time
f = open('cost_drilldown_data.json')
data = json.load(f)
s=csv.writer(open('cd13old.csv','w'))
s.writerow(["filter","cost","value","cost","subvalue","cost"])
i=0
for breakdown in data['breakdown']:
for values in breakdown['values']:
if 'subvalues' in values:
for subvalues in values['subvalues']:
for time in data['time']:
s.writerow([breakdown['filter'],breakdown["cost"],
values['value'],values['cost'],subvalues["subvalue"],
subvalues["cost"],time['time'],time['cost']])
else :
s.writerow([breakdown['filter'],"","",values['value'],values['cost']])
输出是:
filter,cost,value,cost,subvalue,cost,time,cost
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-16,112.793
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-17,112.748
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-18,112.739
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-19,107.165
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-20,89.988
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-21,88.773
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-22,96.591
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-23,104.809
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-24,104.471
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-25,104.472
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-26,103.536
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-27,83.205
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-28,83.103
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-29,83.111
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-30,84.555
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-05-31,86.986
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-01,103.024
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-02,100.905
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-03,102.062
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-04,105.243
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-05,105.134
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-06,111.764
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-07,107.455
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-08,107.62
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-09,107.61
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-10,102.53
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-11,102.282
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-12,105.52
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-13,93.617
tags,5517.734,Name,462.62,BizOps-VM-20,227.576,2017-06-14,41.094
标签,5517.734,姓名,462.62,,70.358,2017-05-16,112.793
标签,5517.734,姓名,462.62,,70.358,2017-05-17,112.748
标签,5517.734,姓名,462.62,,70.358,2017-05-18,112.739
它一次又一次地打印值,我尝试使用迭代但不是 abe 来停止值的重复。所以任何人都可以在这里帮助或指导我,我被困住了
预期结果是:
过滤器、成本、价值、成本、子价值、成本、时间、成本
标签,5517.734,名称,462.62,BizOps-VM-20,227.576,2017-05-16,112.793 标签,5517.734,姓名,462.62,,70.358,2017-05-16,112.793 标签,5517.734,姓名,462.62,BizOps01,60.188,2017-06-10,102.53
【问题讨论】:
-
问题很可能出在输入数据上。但是由于您的示例包含太多问题(缺少逗号、不连贯的缩进、不完整的 json),我无法告诉您更多信息。如果您希望我们能够帮助您,请编写一个有效的 json 输入并修复其缩进。
-
@SergeBallesta,完成缩进,请原谅 json,因为它是巨大的数据,我无法在此处粘贴,请指导我如何使用 if 循环来满足空关键字
-
这就像我想打印过滤器:帐户和以下许多过滤器是否使用 ifloop 或者我可以使用 for 循环是否很好,因为我被困在这个问题中需要任何建议或帮助!!
-
请修正您的输入字符串,使其成为有效的 json。现在无法解析它。除非您提供有效的输入,否则我怀疑有人会帮助您。