Hur skriver jag JSON-data till en fil?
Jag har JSON-data lagrat i variabeln data
.
Jag vill skriva detta till en textfil för testning så att jag inte behöver hämta data från servern varje gång.
För närvarande försöker jag med följande:
obj = open('data.txt', 'wb')
obj.write(data)
obj.close
Och får felet:
TypeError: måste vara sträng eller buffert, inte dict
.
Hur åtgärdar jag detta?
982
3
Du glömde den faktiska JSON-delen -
data
är en ordbok och ännu inte JSON-kodad. Skriv det så här för maximal kompatibilitet (Python 2 och 3):På ett modernt system (dvs. Python 3 och stöd för UTF-8) kan du skriva en snyggare fil med
För att få en utf8-kodad fil i motsats till ascii-kodad i det accepterade svaret för Python 2, använd:
Koden är enklare i Python 3:
På Windows är argumentet
encoding='utf-8'
tillopen
fortfarande nödvändigt.För att undvika att lagra en kodad kopia av data i minnet (resultat av
dumps
) och för att ge ut utf8-kodade bytestringar i både Python 2 och 3, använd:Kallelsen
codecs.getwriter
är överflödig i Python 3 men nödvändig för Python 2.Läsbarhet och storlek:
Användningen av
ensure_ascii=False
ger bättre läsbarhet och mindre storlek:Förbättra läsbarheten ytterligare genom att lägga till flaggorna
indent=4, sort_keys=True
(enligt förslag från dinos66) till argumenten fördump
ellerdumps
. På så sätt får du en snyggt indragen sorterad struktur i json-filen till priset av en något större filstorlek.Jag skulle svara med en liten ändring av de tidigare nämnda svaren och det är att skriva en finare JSON-fil som människans ögon kan läsa bättre. För detta, skicka
sort_keys
somTrue
ochindent
med 4 mellanslagstecken och du är klar. Se också till att asciikoderna inte skrivs in i din JSON-fil: