Almak için utf8 kodlanmış aksine dosyayı ASCII kodlanmış Python 2 kullanılmak üzere kabul edilen yanıtında:
import io, json
with io.open('data.txt', 'w', encoding='utf-8') as f:
f.write(json.dumps(data, ensure_ascii=False))
Python 3'te kod daha basit:
import json
with open('data.txt', 'w') as f:
json.dump(data, f, ensure_ascii=False)
Windows'da encoding='utf-8'
argümanı open
hala gereklidir.
Verilerin kodlanmış bir kopyasını bellekte (sonucu dumps
) saklamaktan kaçınmak ve hem Python 2 hem de 3'te utf8 kodlu bayt dizileri çıkarmak için şunu kullanın:
import json, codecs
with open('data.txt', 'wb') as f:
json.dump(data, codecs.getwriter('utf-8')(f), ensure_ascii=False)
codecs.getwriter
Çağrı Python 3'te gereksiz ama Python 2 için gerekli olan
Okunabilirlik ve boyut:
Kullanımı ensure_ascii=False
daha iyi okunabilirlik ve daha küçük boyut sağlar:
>>> 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
Daha bayraklar ekleyerek okunabilirliği artırmak indent=4, sort_keys=True
(aynı önerdiği dinos66 argümanları) dump
veya dumps
. Bu şekilde, biraz daha büyük bir dosya boyutu pahasına json dosyasında güzel girintili sıralanmış bir yapı elde edersiniz.