Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用python将json中的多个字符串数组转换为csv?_Python_Json_Csv_Data Science - Fatal编程技术网

如何使用python将json中的多个字符串数组转换为csv?

如何使用python将json中的多个字符串数组转换为csv?,python,json,csv,data-science,Python,Json,Csv,Data Science,如何使用python将多个数组的嵌套json转换为csv表格结构? 请参阅完整的json 代码: import json import csv f = open('cost_drilldown_data.json') data = json.load(f) s=csv.writer(open('costdrillwittime_storage4.csv','w')) s.writerow(["filter","cost","value","cost","subvalue","cost","r

如何使用python将多个数组的嵌套json转换为csv表格结构? 请参阅完整的json

代码:

import json
import csv

f = open('cost_drilldown_data.json')

data = json.load(f)
s=csv.writer(open('costdrillwittime_storage4.csv','w'))
s.writerow(["filter","cost","value","cost","subvalue","cost","res_id","cost","tot_cost","metdata"])
i=0
d = []
for breakdown in data['breakdown']:
    #for time in data['time']:
        for storage in data['storage']:
             if storage not in d:

                for values in breakdown['values']:

                    if 'subvalues' in values:
                         for subvalues in values['subvalues']:
                    #for i in range(0,len(data)):
                            s.writerow([breakdown['filter'],breakdown["cost"],values['value'],values['cost'],
                            subvalues["subvalue"],subvalues["cost"],storage['resource_id'],storage['cost'],
                            storage['total_cost'],storage['metadata']])

                    else :
                         s.writerow([breakdown['filter'],"","",values['value'],values['cost']])
上述代码的实际输出:

过滤器,成本,价值,成本,子价值,成本,资源id,成本,总成本,metdata

标签,5517.734,名称,462.62,BizOps-VM-20227.576,i-048e0bfa74ac9cf78,25.047,25.8010000000002,{u'Name':u'BizOps0424001'}

标签,5517.734,姓名,462.62,,70.358,i-048e0bfa74ac9cf78,25.047,25.8010000000002,{u'Name': u'BizOps0424001'}

标签,5517.734,名称,462.62,BizOps01,60.188,i-048e0bfa74ac9cf78,25.047,25.8010000000002,{u'Name': u'BizOps0424001'}

它一次又一次地重复元数据的值,并且在wards后面重复名称

如何使值只打印一次,并根据计数仅打印不同的值

查看完整的csv文件

在ANKUSH的帮助下完全编辑代码:


你贴的问题不清楚,尽管我试着去理解它。在您正在处理的对象中,对象的结构是不规则的。我的意思是,json中的每个关键元素的对象数量并不相同。您也从来没有提到在数据丢失的情况下您到底想要什么

找到下面的代码。我已设法获得列表中所有列的值。你可以把它们打印出来看看。很乐意帮忙

import json

f = open('cost_drilldown_data.json')
data = json.load(f)

breakdown = data['breakdown']
storage = data['storage']
filter_list = []            #first column
filter_cost_list = []       #second column
value_list = []             #third column
cost_list = []              #fourth column
subValue_list = []          #fifth col
subvalueCost_list = []      #sixth col
resID_list = []             #seventh col
storageCost_list = []       #eighth col
totalCost_list = []         #ninth col
metadata_list = []          #tenth col

for eachBreakdown in breakdown:
    filter_list.append(eachBreakdown['filter'])
    filter_cost_list.append(['cost'])
    valuesArr = eachBreakdown['values']
    for eachValues in valuesArr:
        value_list.append(eachValues['value'])
        cost_list.append(eachValues['cost'])
        if 'subvalues' in eachValues:
            subValueArr = eachValues['subvalues']
        for eachSubValueArr in subValueArr:
            subValue_list.append(eachSubValueArr['subvalue'])
            subvalueCost_list.append(eachSubValueArr['cost'])

for eachStorage in storage:
    resID_list.append(eachStorage['resource_id'])
    storageCost_list.append(eachStorage['cost'])
    totalCost_list.append(eachStorage['total_cost'])
    metadata_list.append([eachStorage['metadata']])

你能举例说明吗。你提到的数据包含10个元素。不确定你说的是哪一个。@AnkushRathi,请找到python代码,请更正代码。当你打开链接时,你会找到文件,请下载它,看你的循环是错误的,这就是为什么你在输出中得到相同的标签、成本等值。你能解释一下你到底想要输出什么吗?@AnkushRathi,是的,如何修改循环,将解释我在csv中需要什么:我需要一些特定的数据,比如json多数组中的值及其成本。例如:过滤成本“值”、“成本”、“子值”、“成本”、“资源id”、“成本”、“总成本”、“metdata”标签5877。。。问题是数据的元素数不相等。我的意思是,
breakdow
中有14个元素,
breakdow[values]
中有26个左右。只有你解释清楚了,我才能帮你。谢谢你的努力,这真的帮了我很多,但现在我面临一个挑战,就像你提到的,当我使用writerows时,它会向下打印,而不是向每个存储列的侧面打印。我如何使用代码交替打印@,,请参阅在csv中编辑的用于打印的代码如何使打印资源id并行现在我通过在s.writerow.ie之后的第一个for循环结束之前传递存储for循环来并行打印。但是我必须明白为什么它会被重复。你能告诉我如何停止打印重复的资源id值及其成本吗。将粘贴Meth的csv输出此线程无缘无故运行时间过长…请在此处发送邮件给我-rathiankush123@gmail.com
import json

f = open('cost_drilldown_data.json')
data = json.load(f)

breakdown = data['breakdown']
storage = data['storage']
filter_list = []            #first column
filter_cost_list = []       #second column
value_list = []             #third column
cost_list = []              #fourth column
subValue_list = []          #fifth col
subvalueCost_list = []      #sixth col
resID_list = []             #seventh col
storageCost_list = []       #eighth col
totalCost_list = []         #ninth col
metadata_list = []          #tenth col

for eachBreakdown in breakdown:
    filter_list.append(eachBreakdown['filter'])
    filter_cost_list.append(['cost'])
    valuesArr = eachBreakdown['values']
    for eachValues in valuesArr:
        value_list.append(eachValues['value'])
        cost_list.append(eachValues['cost'])
        if 'subvalues' in eachValues:
            subValueArr = eachValues['subvalues']
        for eachSubValueArr in subValueArr:
            subValue_list.append(eachSubValueArr['subvalue'])
            subvalueCost_list.append(eachSubValueArr['cost'])

for eachStorage in storage:
    resID_list.append(eachStorage['resource_id'])
    storageCost_list.append(eachStorage['cost'])
    totalCost_list.append(eachStorage['total_cost'])
    metadata_list.append([eachStorage['metadata']])