折腾:
期间,需要把一个dict的json,输出到文件中,且:
带缩进的,好看
不要\uxxx,要encode后的中文
然后再去把json写入到文件,且要格式化带缩进的效果:
<code>with open("currentJson.json", 'w') as tmpFp:
json.dump(currentJson, tmpFp, indent=2, encoding="utf-8")
</code>结果输出中的内容,带\uxxxx而不是编码后的中文:

<code>{
"pluginsConfig": {
"toolbar-button": {
"url": "http://book.crifan.org/books/youdao_note_summary/pdf/youdao_note_summary.pdf"
},
"sitemap-general": {
"prefix": "https://book.crifan.org/gitbook/youdao_note_summary/website/"
},
"github-buttons": {
"buttons": [
{
"repo": "youdao_note_summary"
}
]
}
},
"description": "\u603b\u7ed3\u4e4b\u524d\u4f7f\u7528\u8fc7\u6709\u9053\u4e91\u7b14\u8bb0\u548c\u6709\u9053\u4e91\u534f\u4f5c\u7684\u5fc3\u5f97\u4f9b\u53c2\u8003",
"title": "\u6709\u9053\u4e91\u7b14\u8bb0\u548c\u4e91\u534f\u4f5c\u4f7f\u7528\u603b\u7ed3"
}
</code>试了试:
<code># json.dump(currentJson, tmpFp, indent=2)
# currentJsonUtf8 = currentJson.encode("utf-8")
# json.dump(currentJsonUtf8, tmpFp, indent=2)
</code>问题依旧。
python dict to file without unicode
Python Dict and File | Python Education | Google Developers
Suppress the u’prefix indicating unicode’ in python strings – Stack Overflow
python – How to get string objects instead of Unicode from JSON? – Stack Overflow
<code>currentJsonDump = json.dumps(currentJson, ensure_ascii=False) json.dump(currentJsonDump, tmpFp, indent=2, encoding="utf-8") </code>
问题依旧。
难道非要:
<code>>>> nl = json.loads(js)
>>> nl
[u'a', u'b']
>>> nl = [s.encode('utf-8') for s in nl]
>>> nl
['a', 'b']
</code>?
python json dump encoded string
python – Saving utf-8 texts in json.dumps as UTF8, not as \u escape sequence – Stack Overflow
dump后再去调用encode utf-8
<code>currentJsonDump = json.dumps(currentJson, ensure_ascii=False)
print("type(currentJsonDump)", type(currentJsonDump)) #('type(currentJsonDump)', <type 'unicode'>)
currentJsonUtf8 = currentJsonDump.encode("utf-8")
json.dump(currentJsonUtf8, tmpFp, indent=2, encoding="utf-8")
</code>问题依旧。
<code>import codecs
# with open("currentJson.json", 'w') as tmpFp:
with codecs.open("currentJson.json", 'w', encoding="utf-8") as tmpFp:
# json.dump(currentJson, tmpFp, indent=2, encoding="utf-8")
# json.dump(currentJson, tmpFp, indent=2)
# currentJsonUtf8 = currentJson.encode("utf-8")
# json.dump(currentJsonUtf8, tmpFp, indent=2)
currentJsonDump = json.dumps(currentJson, ensure_ascii=False)
print("type(currentJsonDump)", type(currentJsonDump)) #('type(currentJsonDump)', <type 'unicode'>)
currentJsonUtf8 = currentJsonDump.encode("utf-8")
print("type(currentJsonUtf8)", type(currentJsonUtf8))
json.dump(currentJsonUtf8, tmpFp, indent=2, encoding="utf-8")
</code>问题依旧。
【总结】
最后用:
<code>import codecs
with codecs.open("currentJson.json", 'w', encoding="utf-8") as tmpFp:
json.dump(currentJson, tmpFp, indent=2, ensure_ascii=False)
</code>终于输出了中文了:
