/json-to-csv

Convert JSON file to CSV file with Python 🐍

Primary LanguagePython

Conversor de arquivo JSON para CSV com Python 🐍

É uma aplicacão extremamente simples, porém me ajudou MUITO em um trabalho. Com poucas linhas de código você pode converter seu arquivo json em um arquivo csv usando Python.

Passo a passo:

Crie o arquivo: json_to_csv.py (Ou com qualquer outro nome que desejar, o que importa é a extensão .py)

Copie o código abaixo e cole no arquivo.

import sys, json, csv

# Convert to string keeping encoding in mind...

def to_string(s):
    try:
        return str(s)
    except:
        #Change the encoding type if needed
        return s.encode('utf-8')


def reduce_item(key, value):
    global reduced_item
    
    #Reduction Condition 1
    if type(value) is list:
        i=0
        for sub_item in value:
            reduce_item(key+'_'+to_string(i), sub_item)
            i=i+1

    #Reduction Condition 2
    elif type(value) is dict:
        sub_keys = value.keys()
        for sub_key in sub_keys:
            reduce_item(key+'_'+to_string(sub_key), value[sub_key])
    
    #Base Condition
    else:
        reduced_item[to_string(key)] = to_string(value)


if __name__ == "__main__":
    if len(sys.argv) != 4:
        print ("\nUsage: python json_to_csv.py <prefix> <json_in_file_path> <csv_out_file_path>\n")
    else:
        #Reading arguments
        node = sys.argv[1]
        json_file_path = sys.argv[2]
        csv_file_path = sys.argv[3]

        fp = open(json_file_path, 'r')
        json_value = fp.read()
        raw_data = json.loads(json_value)
        fp.close()
        
        try:
            data_to_be_processed = raw_data[node]
        except:
            data_to_be_processed = raw_data

        processed_data = []
        header = []
        for item in data_to_be_processed:
            reduced_item = {}
            reduce_item(node, item)

            header += reduced_item.keys()

            processed_data.append(reduced_item)

        header = list(set(header))
        header.sort()

        with open(csv_file_path, 'w+') as f:
            writer = csv.DictWriter(f, header, quoting=csv.QUOTE_ALL)
            writer.writeheader()
            for row in processed_data:
                writer.writerow(row)

        print ("Arquivo CSV criado com %d colunas" % len(header))

Salve o arquivo e no terminal rode o seguinte comando:

python json_to_csv.py <prefix> input.json output.csv

It's all folks

Authors


@felipe-ssilva