2016-01-27 2 views
0

Essayer de convertir le fichier CSV en fichier JSON aussi simplement que possible tout en ajoutant un nœud racine. Pour une raison quelconque, le fichier JSON omet au moins la dernière ligne (dans certains cas jusqu'à 4 lignes) à partir de la fin du fichier CSV. Que se passe t-il ici?La conversion de CSV en JSON omet la dernière rangée?

Exemple CSV

name, id, tag 
John, 12345, father 
Mary, 33456, sister 
Beth, 56789, daughter 

de JSON désiré

{"node": "", "children": [ 
{"name": "John", "id": 12345, "tag": "father"}, 
{"name": "Mary", "id": 33456, "tag": "sister"}, 
{"name": "Beth", "id": 56789, "tag": "daughter"} 
]} 

Ce que je veux:

{"node": "", "children": [ 
    {"name": "John", "id": 12345, "tag": "father"}, 
    {"name": "Mary", "id": 33456, "tag": "sister"}, 
    ]} 

Mon code:

csvfile = open('file.csv', 'r') 
jsonfile = open('file.json', 'w') 

reader = csv.DictReader(csvfile) 
jsonfile.write('{"node": "", "children": [') 
for row in reader: 
    json.dump(row, jsonfile) 
    #jsonfile.write(',\n') 
jsonfile.write('] }') 

P.S. Je sais que j'ajoute une virgule sur la dernière ligne du fichier JSON - j'aimerais aussi savoir comment ajouter la virgule après tout sauf la dernière rangée, mais c'est moins important.

Répondre

2

Vous n'avez pas besoin de construire manuellement la chaîne JSON. Faire une structure de données Python, puis le jeter dans le fichier JSON via json.dump():

import json 

reader = csv.DictReader(csvfile) 
data = {"node": "", "children": list(reader)} 

with open('file.json', 'w') as jsonfile:  
    json.dump(data, jsonfile) 
+0

Cela est beaucoup plus serré le code - merci pour cela - mais il ne semble pas résoudre le problème!. La dernière ligne du fichier csv est toujours omise ou, dans certains cas, remplace certaines valeurs par "null" (malgré la valeur apparaissant très bien dans le fichier CSV), puis omet les lignes qui le suivent. –