簡體   English   中英

將JSON從文件加載到Python字典中的正確方法

[英]Correct way of loading JSON from file into a Python 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轉換為字典?

您的data必須已經是一個JSON字符串,然后在json.dump期間對其進行了雙重編碼。 然后,當然您需要稍后對其進行雙解碼。 因此,與其將原始JSON再次用JSON編碼,不如直接將其寫入文件中:

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

免責聲明:我不知道這是否是正確的正確方法,但對我有用:

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

您當前的方法在這里是正確的。 對於json.loads()ast.literal_eval() ,他們正在解析完全不同的語言。 如果您的json文件正是您粘貼在此處的內容,我建議您使用json庫,因為它更快。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM