Untuk mendapatkan file ber- utf8 sebagai ganti ascii- di- enode dalam jawaban yang diterima untuk Python 2 gunakan:
import io, json
with io.open('data.txt', 'w', encoding='utf-8') as f:
f.write(json.dumps(data, ensure_ascii=False))
Kode ini lebih sederhana dalam Python 3:
import json
with open('data.txt', 'w') as f:
json.dump(data, f, ensure_ascii=False)
Di Windows, encoding='utf-8'
argumen untuk open
masih diperlukan.
Untuk menghindari penyimpanan salinan data yang dikodekan dalam memori (hasil dumps
) dan untuk output bytest yang dikodekan utf8 di Python 2 dan 3, gunakan:
import json, codecs
with open('data.txt', 'wb') as f:
json.dump(data, codecs.getwriter('utf-8')(f), ensure_ascii=False)
The codecs.getwriter
panggilan berlebihan di Python 3 tetapi diperlukan untuk Python 2
Keterbacaan dan ukuran:
Penggunaan ensure_ascii=False
memberi keterbacaan yang lebih baik dan ukuran yang lebih kecil:
>>> 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
Lebih lanjut meningkatkan keterbacaan dengan menambahkan flag indent=4, sort_keys=True
(seperti yang disarankan oleh dinos66 ) ke argumen dump
atau dumps
. Dengan cara ini Anda akan mendapatkan struktur diurutkan dengan indentasi baik dalam file json dengan biaya ukuran file yang sedikit lebih besar.