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

How do you convert a multiple arrays of string inside json into csv using python?

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

代码:

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']])

以上代码的实际输出:

filter,cost,value,cost,subvalue,cost,res_id,cost,tot_cost,metdata

tags,5517.734,Name,462.62,BizOps-VM-20,227.576,i-048e0bfa74ac9cf78,25.047,25.801000000000002,{u'name': u'BizOps0424001'}

tags,5517.734,Name,462.62,,70.358,i-048e0bfa74ac9cf78,25.047,25.801000000000002,{u'name': u'BizOps0424001'}

tags,5517.734,Name,462.62,BizOps01,60.188,i-048e0bfa74ac9cf78,25.047,25.801000000000002,{u'name': u'BizOps0424001'}...

它一次又一次地重复元数据的值,并在 wards 之后重复 NAME。

如何根据计数只打印一次值和不同的值。

查看完整的 csv 文件here

TOTALLY EDITED CODE AFTER ANKUSH's HELP:

import json
import csv

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


s=csv.writer(open('googletry1.csv','w'))


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

s.writerow(["filter_list","filter_cost_list","value_list","cost_list","subValue_list","subvalueCost_list","resID_list","storageCost_list","totalCost_list","metadata_list"])

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'])

                    #s.writerow([breakdown['filter'],breakdown["cost"],values['value'],values['cost'],
                    #subvalues["subvalue"],subvalues["cost"],storage['resource_id'],storage['cost'],
                    #storage['total_cost'],storage['metadata'],storage['volume_cost'],storage['provider']])

            s.writerow([eachBreakdown['filter'],eachBreakdown['cost'],eachValues['value'],eachValues['cost'],
            eachSubValueArr['subvalue'],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']])


    s.writerow([eachStorage['resource_id']])


now i am getting challenge in printing the resource id to the side of the subvalue cost: I am getting csv file as :
enter code here

你发的问题不太清楚,虽然我已经试着理解了。在您正在处理的 json 中,对象的结构不规则。我的意思是,每个关键元素的 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']])