प्राप्त करने के लिए UTF8 -encoded के रूप में करने का विरोध किया फ़ाइल ascii -encoded अजगर 2 उपयोग के लिए स्वीकार किए जाते हैं जवाब में:
import io, json
with io.open('data.txt', 'w', encoding='utf-8') as f:
f.write(json.dumps(data, ensure_ascii=False))
पायथन 3 में कोड सरल है:
import json
with open('data.txt', 'w') as f:
json.dump(data, f, ensure_ascii=False)
विंडोज पर, encoding='utf-8'
तर्क open
अभी भी आवश्यक है।
मेमोरी (परिणाम dumps
) में डेटा की एन्कोडेड कॉपी और पाइथन 2 और 3 दोनों में utf8- एन्कोडेड बाइटस्टार्स के उत्पादन से बचने के लिए, उपयोग करें:
import json, codecs
with open('data.txt', 'wb') as f:
json.dump(data, codecs.getwriter('utf-8')(f), ensure_ascii=False)
codecs.getwriter
कॉल अजगर 3 में अनावश्यक लेकिन अजगर 2 के लिए आवश्यक है
पठनीयता और आकार:
के उपयोग के ensure_ascii=False
बेहतर पठनीयता और छोटे आकार देता है:
>>> 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
इसके अलावा झंडे जोड़कर पठनीयता में सुधार indent=4, sort_keys=True
(के रूप में द्वारा सुझाए गए dinos66 के तर्कों के लिए) dump
या dumps
। इस तरह से आपको थोड़ा बड़ा फ़ाइल आकार की कीमत पर json फ़ाइल में एक अच्छी तरह से इंडेंट की गई संरचना मिल जाएगी।