Convertir JSON a CSV usando Python (inactivo)

Tengo un archivo JSON de latitud / longitud que quiero convertir en un archivo CSV. Quiero hacer esto usando Python. He leído / intentado todas las otras sugerencias de resultados de búsqueda de Google y stackoverflow. Me las arreglé para llegar tan lejos como para crear el CSV e incluir encabezados, pero más allá de eso, comienzan a suceder cosas ridículas. Aquí está la parte de trabajo de mi código hasta ahora:

import json, csv x="""[ {"longitude":"-73.689070","latitude":"40.718000"}, {"longitude":"-73.688400","latitude":"40.715990"}, {"longitude":"-73.688340","latitude":"40.715790"}, {"longitude":"-73.688370","latitude":"40.715500"}, {"longitude":"-73.688490","latitude":"40.715030"}, {"longitude":"-73.688810","latitude":"40.714370"}, {"longitude":"-73.688980","latitude":"40.714080"}, {"longitude":"-73.689350","latitude":"40.713390"}, {"longitude":"-73.689530","latitude":"40.712800"}, {"longitude":"-73.689740","latitude":"40.712050"}, {"longitude":"-73.689820","latitude":"40.711810"}, {"longitude":"-73.689930","latitude":"40.711380"}, {"longitude":"-73.690110","latitude":"40.710710"} ]""" x = json.loads(x) f = csv.writer(open("test.csv", "wb+")) f.writerow(["longitude", "latitude"]) 

Y aquí es donde se cae (“? ‘S” significa que no estoy seguro de qué poner allí. He intentado todo tipo de combinaciones de cosas que he encontrado en mi búsqueda de respuestas):

 for ? in ?: f.writerow([?[?],?[?]]) 

Obtuve lo anterior de las respuestas a esta pregunta por little_fish . Puedo ver que nuestros ejemplos de JSON son un poco diferentes, y supongo que tiene algo que ver con el motivo por el que no puedo hacer que funcione …

Cualquier ayuda sería muy apreciada, y me complace proporcionarle una aclaración si es necesario. Para tu información, soy nuevo en Python, así que si vas a usar la jerga, por favor explícalo lo más claramente posible. ¡Gracias! (PS No estoy seguro si importa, pero estoy usando IDLE).

Yo usaría un csv.DictWriter , ya que se trata de dicts, que es exactamente el caso que DictWriter está ahí para.

 rows = json.loads(x) with open('test.csv', 'wb+') as f: dict_writer = csv.DictWriter(f, fieldnames=['longitude', 'latitude']) dict_writer.writeheader() dict_writer.writerows(rows) 

Editar:
Como el método .writeheader() solo se agregó en 2.7, puede usar algo como esto en versiones anteriores:

 rows = json.loads(x) fieldnames = ['longitude', 'latitude'] with open('test.csv', 'wb+') as f: dict_writer = csv.DictWriter(f, fieldnames=fieldnames) dict_writer.writerow(dict(zip(fieldnames, fieldnames))) dict_writer.writerows(rows) 

Recorrer la lista uno por uno, y escribir los nombres de los campos explícitamente es quizás el más simple para este caso.

 for row in x: f.writerow( [row['longitude'], row['latitude']] ) 

Esto te ayudará a iterar cada elemento y escribirlo en tu archivo csv:

 import json, csv x = """[ {"longitude":"-73.689070","latitide":"40.718000"}, {"longitude":"-73.688400","latitide":"40.715990"}, {"longitude":"-73.688340","latitide":"40.715790"}, {"longitude":"-73.688370","latitide":"40.715500"}, {"longitude":"-73.688490","latitide":"40.715030"}, {"longitude":"-73.688810","latitide":"40.714370"}, {"longitude":"-73.688980","latitide":"40.714080"}, {"longitude":"-73.689350","latitide":"40.713390"}, {"longitude":"-73.689530","latitide":"40.712800"}, {"longitude":"-73.689740","latitide":"40.712050"}, {"longitude":"-73.689820","latitide":"40.711810"}, {"longitude":"-73.689930","latitide":"40.711380"}, {"longitude":"-73.690110","latitide":"40.710710"} ]""" jsoned = json.loads(x) with open("test.csv", "wb+") as csv_file: csv_writer = csv.writer(csv_file) for i in jsoned: csv_writer.writerow([i[u'longitude'], i[u'latitide']]) 

Tenga en cuenta que está escribiendo mal la latitud (latitide) en su publicación original.

Basado en algunas de las respuestas, ¡esto funciona como un encanto !:

 import json, csv x="""[ {"longitude":"-73.689070","latitude":"40.718000"}, {"longitude":"-73.688400","latitude":"40.715990"}, {"longitude":"-73.688340","latitude":"40.715790"}, {"longitude":"-73.688370","latitude":"40.715500"}, {"longitude":"-73.688490","latitude":"40.715030"}, {"longitude":"-73.688810","latitude":"40.714370"}, {"longitude":"-73.688980","latitude":"40.714080"}, {"longitude":"-73.689350","latitude":"40.713390"}, {"longitude":"-73.689530","latitude":"40.712800"}, {"longitude":"-73.689740","latitude":"40.712050"}, {"longitude":"-73.689820","latitude":"40.711810"}, {"longitude":"-73.689930","latitude":"40.711380"}, {"longitude":"-73.690110","latitude":"40.710710"} ]""" x = json.loads(x) f = csv.writer(open("test.csv", "wb+")) f.writerow(["longitude", "latitude"]) for row in x: f.writerow( [row['longitude'], row['latitude']] )