Aqui está meu código, coisas muito simples ...
import csv
import json
csvfile = open('file.csv', 'r')
jsonfile = open('file.json', 'w')
fieldnames = ("FirstName","LastName","IDNumber","Message")
reader = csv.DictReader( csvfile, fieldnames)
out = json.dumps( [ row for row in reader ] )
jsonfile.write(out)
Declare alguns nomes de campo, o leitor usa CSV para ler o arquivo e os nomes de arquivo para despejar o arquivo em um formato JSON. Aqui está o problema ...
Cada registro no arquivo CSV está em uma linha diferente. Eu quero que a saída JSON seja da mesma maneira. O problema é que despeja tudo em uma longa linha gigante.
Eu tentei usar algo como for line in csvfile:
e, em seguida, executar meu código abaixo daquele com o reader = csv.DictReader( line, fieldnames)
qual faz um loop em cada linha, mas ele faz o arquivo inteiro em uma linha e, em seguida, executa o loop em todo o arquivo em outra linha ... continua até ficar sem linhas .
Alguma sugestão para corrigir isso?
Editar: Para esclarecer, atualmente eu tenho: (todos os registros na linha 1)
[{"FirstName":"John","LastName":"Doe","IDNumber":"123","Message":"None"},{"FirstName":"George","LastName":"Washington","IDNumber":"001","Message":"Something"}]
O que procuro: (2 registros em 2 linhas)
{"FirstName":"John","LastName":"Doe","IDNumber":"123","Message":"None"}
{"FirstName":"George","LastName":"Washington","IDNumber":"001","Message":"Something"}
Não cada campo individual indentado / em uma linha separada, mas cada registro em sua própria linha.
Alguns exemplos de entrada.
"John","Doe","001","Message1"
"George","Washington","002","Message2"
[{..row..},{..row..},...]
não{..row..}{..row..}..
. Ou seja, a saída parece ser uma matriz json de objetos json, não um fluxo de objetos json não conectados.