我目前正在这样做以将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.loads
和json.load
来将JSON从文件中导入字典?
答案 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库,因为它更快。