使用某些字符时,JSON转储会破坏我的字典

时间:2016-05-28 17:04:23

标签: python json character dump

使用json.dump将数据转储到文件中。 数据如下所示:

{"hello": {"this": 1, "a": 1, "is": 1, "test": 1}}

我用来实现此目的的代码如下(worddict是一个文件,类似于file.json):

with open(words, 'w') as fp:
    json.dump(worddict, fp)
fp.close()

我希望以这种格式获取数据:

{
"hello": {
    "a": 1,
    "is": 1,
    "test": 1,
    "this": 1
}

我将代码更改为:

with open(words, 'w') as fp:
    json.dump(worddict, fp, sort_keys=True, indent=4, separators=(',', ': '))
fp.close()

它有效,直到我尝试转储字符“Á”,“É”,“Ű”...... 这些字符会破坏worddict文件,当我捕获文件时,它看起来像这样:

{

知道为什么吗?

2 个答案:

答案 0 :(得分:0)

替换

    json.dump(worddict, fp, sort_keys=True, indent=4, separators=(',', ': '))

    json.dump(worddict, fp, sort_keys=True, indent=4, separators=(',', ': '), ensure_ascii=False)

答案 1 :(得分:0)

我在python2和python3中运行了你的代码片段。 在python3中,它没有给我任何错误。

我运行了以下代码:

import json

words = 'a.txt'
worddict = {"hello": {"this": 1, "a": 1, "is": 1, "test": "Á"}}
with open(words, 'w') as fp:
    json.dump(worddict, fp, sort_keys=True, indent=4, separators=(',', ': '))

得到了输出:

{
    "hello": {
        "a": 1,
        "is": 1,
        "test": "\u00c1",
        "this": 1
    }
}

但是在python2中,我遇到了错误。我有一个描述错误的链接: http://www.python.org/peps/pep-0263.html

python2中出现的问题是python2字符串,默认情况下不是unicode。所以你必须在源代码文件的顶部提到编码。 我添加了#34; #coding = UTF-8"在python源代码开始之前到文件的顶部,以便让python解释器知道文件的编码。一旦我这样做,代码运行在python2以及python3没有错误。 我得到以下输出:

{
    "hello": {
        "a": 1,
        "is": 1,
        "test": "\u00c1",
        "this": 1
    }
}

这是我使用的完整最终源代码。

# coding=UTF-8

import json

words = 'a.txt'
worddict = {"hello": {"this": 1, "a": 1, "is": 1, "test": "Á"}}
with open(words, 'w') as fp:
    json.dump(worddict, fp, sort_keys=True, indent=4, separators=(',', ': '))