Wie kann ich JSON-Daten in eine Datei schreiben?
Ich habe JSON-Daten in der Variablen "data" gespeichert.
Ich möchte diese Daten zum Testen in eine Textdatei schreiben, damit ich nicht jedes Mal die Daten vom Server abrufen muss.
Derzeit versuche ich dies:
obj = open('data.txt', 'wb')
obj.write(data)
obj.close
Und erhalte die Fehlermeldung:
TypeError: muss string oder buffer sein, nicht dict
Wie kann ich das beheben?
982
3
Sie haben den eigentlichen JSON-Teil vergessen -
data
ist ein Wörterbuch und noch nicht JSON-kodiert. Schreiben Sie es wie folgt für maximale Kompatibilität (Python 2 und 3):Auf einem modernen System (d.h. Python 3 und UTF-8 Unterstützung) können Sie eine schönere Datei schreiben mit
Um eine utf8-kodierte Datei zu erhalten, im Gegensatz zu ascii-kodiert in der akzeptierten Antwort für Python 2, verwenden Sie:
Der Code ist in Python 3 einfacher:
Unter Windows ist das Argument
encoding='utf-8'
füropen
immer noch notwendig.Um die Speicherung einer kodierten Kopie der Daten im Speicher zu vermeiden (Ergebnis von
dumps
) und um utf8-kodierte Bytestrings sowohl in Python 2 als auch in 3 auszugeben, verwenden Sie:Der Aufruf
codecs.getwriter
ist in Python 3 überflüssig, aber für Python 2 erforderlichLesbarkeit und Größe:
Die Verwendung von
ensure_ascii=False
führt zu besserer Lesbarkeit und geringerer Größe:Verbessern Sie die Lesbarkeit weiter, indem Sie die Flags
indent=4, sort_keys=True
(wie von dinos66 vorgeschlagen) zu den Argumenten vondump
oderdumps
hinzufügen. Auf diese Weise erhalten Sie eine schön eingerückte, sortierte Struktur in der json-Datei, allerdings auf Kosten einer etwas größeren Dateigröße.Ich würde mit einer leichten Änderung der oben genannten Antworten antworten, und zwar, indem ich eine aufgehübschte JSON-Datei schreibe, die von menschlichen Augen besser gelesen werden kann. Dazu geben Sie
sort_keys
alsTrue
undindent
mit 4 Leerzeichen an und schon sind Sie startklar. Achten Sie auch darauf, dass die Ascii-Codes nicht in Ihre JSON-Datei geschrieben werden: