es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo convertir una lista de jsons en una lista anidada de jsons a CSV en python?

¿Cómo puedo convertir una lista de jsons en una lista anidada de jsons al siguiente formato? No parece que pueda hacerlo bien y muchos ejemplos usan pandas, pero preferiría usar csv.DictWriter. Mis pensamientos son (en un ciclo) leer el json, en este caso data, trasponerlo para que sea horizontal.


{ "rows": [
{
"data": [
{
"A": "1",
"B": "2"
},
{
"C": "3",
"D": "4"
},
{
"E": "5",
"F": "6"
}
]
},
...
...
...
{
"data": [
{
"A": "7",
"B": "8"
},
{
"C": "9",
"D": "10"
},
{
"E": "11",
"F": "12"
}
]
}
]
}

Formato deseado:

A, B, C, D, E, F
1, 2, 3, 4, 5, 6
...
7, 8, 9, 10, 11, 12

Ya he leído el json usando json.loads. Solo tengo problemas para convertir esta parte.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para convertir la lista anidada de JSON en el formato deseado utilizando csv.DictWriter, puedes seguir estos pasos:

    1. Extrae las claves de los objetos JSON en la lista anidada y combínalas en una lista de encabezados.
    2. Usa csv.DictWriter para escribir los encabezados en un nuevo archivo CSV.
    3. Recorre cada objeto JSON en la lista anidada y escribe sus valores en el archivo CSV utilizando csv.DictWriter.

    Aquí tienes un ejemplo de fragmento de código que muestra cómo hacer esto:

    import csv
    import json
    
    # Cargar la lista anidada de JSONs
    data = [[{"A": "1", "B": "2"}, {"C": "3", "D": "4"}, {"E": "5", "F": "6"}],
            [{"A": "7", "B": "8"}, {"C": "9", "D": "10"}, {"E": "11", "F": "12"}]]
    
    # Extraer los encabezados de los objetos JSON en la lista anidada
    headers = set().union(*data)
    
    # Escribir los encabezados en un nuevo archivo CSV
    with open("output.csv", "w", newline="") as f:
        writer = csv.DictWriter(f, fieldnames=headers)
        writer.writeheader()
    
        # Recorrer cada objeto JSON en la lista anidada y escribir sus valores en el archivo CSV
        for item in data:
            writer.writerow(dict((k, v) for d in item for k, v in d.items()))
    

    Esto debería producir un archivo CSV con el siguiente contenido:

    A,B,C,D,E,F
    1,2,3,4,5,6
    7,8,9,10,11,12
    

Comments are closed.