将JSON从文件加载到Python字典的正确方法

时间:2015-06-05 12:58:22

标签: python json dictionary

我目前正在这样做以将JSON保存到文件中:

with open(filename, 'w+') as f:
    json.dump(data, f)

我这样做是为了将JSON从文件加载到Python字典中:

with open(filename, 'r') as f:
     data = json.loads(json.load(f))

我理解json.load从文件加载JSON,json.loads从字符串加载JSON。

当我调用json.load(f)从文件加载JSON时,我得到一个JSON对象的字符串表示:

'{"a": 1,"b": 2,"c": 3}'

然后我调用json.loads(json.load(f))将该字符串表示转换为Python字典:

{'a': 1, 'b': 2, 'c': 3}

我知道我也可以使用ast.literal_eval()将字符串转换为Python字典。

我的问题是 - 将JSON从文件目录加载到Python字典的正确方法是什么?是否真的有必要调用json.loadsjson.load来将JSON从文件中导入字典?

3 个答案:

答案 0 :(得分:4)

您的json.dump必须已经是一个JSON字符串,然后您在此期间对其进行了双重编码 with open(filename, 'w+') as f: f.write(data) 。当然,您需要稍后对其进行双重解码。因此,不要再使用JSON对原始JSON进行编码,而是按原样将其写入文件:

int phi (int n) {
    int result = n;
    for (int i=2; i*i<=n; ++i)
        if (n % i == 0) {
            while (n % i == 0)
                n /= i;
            result -= result / i;
        }
    if (n > 1)
        result -= result / n;
    return result;
}

答案 1 :(得分:0)

免责声明:我不知道这是否是明确的正确的方式,但它对我有用:

jd0 = {
   'foo': 1337,
   'bar': 'baz'
}
# Dump it somewhere
with open('/Dump/it/somewhere/test.json', 'w') as fh: 
    json.dump(jd0, fh)

如果我再加载它,它又是一个字典:

with open('/Dump/it/somewhere/test.json', 'r') as fh:
    jd1 = json.load(fh)
    print type(jd1) == dict

打印

 True

答案 2 :(得分:0)

您当前的方法在这里是正确的。对于json.loads()ast.literal_eval(),他们正在解析完全不同的语言。如果您的json文件正是您在此处粘贴的内容,我建议您使用json库,因为它更快。

https://stackoverflow.com/a/21223411/456105