Yanıtlar:
Dokümanların söylediklerinden başka eklenecek pek bir şey yok. JSON'u bir dosyaya / sokete veya herhangi bir şeye dökmek istiyorsanız, o zaman devam etmelisiniz dump()
. Yalnızca bir dize olarak ihtiyacınız varsa (yazdırma, ayrıştırma veya her neyse) o zaman dumps()
(dump string) kullanın
Antii Haapala'nın bu cevapta bahsettiği gibi , ensure_ascii
davranışta bazı küçük farklılıklar vardır . Bu çoğunlukla temel write()
işlevin nasıl çalıştığına bağlıdır, çünkü tüm dizeden ziyade parçalar üzerinde çalışır. Bununla ilgili daha fazla ayrıntı için cevabını kontrol edin.
json.dump()
Objeyi JSON formatlı bir akış olarak fp'ye seri hale getirin (a .write () - dosya benzeri nesneyi destekler
Sure_ascii False ise, fp'ye yazılan bazı parçalar unicode örnekleri olabilir
json.dumps()
Objeyi JSON formatlı bir str'ye seri hale getirin
Sure_ascii False ise, sonuç ASCII olmayan karakterler içerebilir ve dönüş değeri bir unicode örneği olabilir
s
String parametreli fonksiyonlar . Diğerleri dosya akışlarını alır.
Bellek kullanımı ve hızda.
Onu aradığınızda jsonstr = json.dumps(mydata)
önce hafızada verilerinizin tam bir kopyasını oluşturur ve sonra siz file.write(jsonstr)
onu diske atarsınız. Dolayısıyla bu daha hızlı bir yöntemdir ancak kaydedilecek büyük miktarda veriniz varsa sorun olabilir.
json.dump(mydata, file)
'S' olmadan aradığınızda , veriler yığınlar halinde döküldüğü için yeni bellek kullanılmaz. Ancak tüm süreç yaklaşık 2 kat daha yavaştır.
Kaynak: Ben kaynak kodunu kontrol json.dump()
ve json.dumps()
hem de hem vakit ölçme varyantları test time.time()
ve htop bellek kullanımını izlemek.
Python 2'deki dikkate değer bir fark, kullanıyorsanız ensure_ascii=False
, dump
UTF-8 kodlu verileri dosyaya düzgün bir şekilde yazacak olmasıdır (UTF-8 olmayan genişletilmiş karakterlere sahip 8 bitlik dizeler kullanmadıysanız):
dumps
Öte yandan, ile dizeler için kullandığınız türlere bağlı olarak ensure_ascii=False
a str
veya unicode
sadece üretebilir :
Bu dönüştürme tablosunu kullanarak objeyi JSON formatlı bir str'ye seri hale getirin. Sure_ascii False ise, sonuç ASCII olmayan karakterler içerebilir ve dönüş değeri bir
unicode
örnek olabilir .
(vurgu benim). Yine de bir str
örnek olabileceğini unutmayın .
Bu nedenle, hangi formatın döndürüldüğünü kontrol etmeden ve muhtemelen oynamadan yapıyı dosyaya kaydetmek için dönüş değerini kullanamazsınız unicode.encode
.
Bu 8-bit / Unicode karmaşası olmadığından, bu elbette Python 3 için artık geçerli bir endişe değil.
Gelince load
vs loads
, load
gördüğü bütün tek dosyadan birden satır sınırlı JSON belgeleri okumak için kullanamaz, böylece bir JSON belge olması için dosyayı.
json.dumps([b'123'])
-> TypeError
.