Um UTF - 8 - kodierte Datei im Gegensatz zu ascii - codiertes in der akzeptierten Antwort für Python 2 Verwendung:
import io, json
with io.open('data.txt', 'w', encoding='utf-8') as f:
f.write(json.dumps(data, ensure_ascii=False))
Der Code ist in Python 3 einfacher:
import json
with open('data.txt', 'w') as f:
json.dump(data, f, ensure_ascii=False)
Unter Windows ist das encoding='utf-8'
Argument to open
weiterhin erforderlich.
Verwenden Sie Folgendes, um zu vermeiden, dass eine codierte Kopie der Daten im Speicher gespeichert wird (Ergebnis von dumps
) und utf8-codierte Bytestrings in Python 2 und 3 auszugeben.
import json, codecs
with open('data.txt', 'wb') as f:
json.dump(data, codecs.getwriter('utf-8')(f), ensure_ascii=False)
Der codecs.getwriter
Aufruf ist in Python 3 redundant, für Python 2 jedoch erforderlich
Lesbarkeit und Größe:
Die Verwendung von ensure_ascii=False
bietet eine bessere Lesbarkeit und eine kleinere Größe:
>>> json.dumps({'price': '€10'})
'{"price": "\\u20ac10"}'
>>> json.dumps({'price': '€10'}, ensure_ascii=False)
'{"price": "€10"}'
>>> len(json.dumps({'абвгд': 1}))
37
>>> len(json.dumps({'абвгд': 1}, ensure_ascii=False).encode('utf8'))
17
Weitere Verbesserung der Lesbarkeit durch Hinzufügen von Flags indent=4, sort_keys=True
(wie von dinos66 vorgeschlagen ) zu Argumenten von dump
oder dumps
. Auf diese Weise erhalten Sie eine gut eingerückte sortierte Struktur in der JSON-Datei auf Kosten einer etwas größeren Datei.