प्राप्त करने के लिए 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 फ़ाइल में एक अच्छी तरह से इंडेंट की गई संरचना मिल जाएगी।