【问题标题】:Correct way of loading JSON from file into a Python dictionary将 JSON 从文件加载到 Python 字典中的正确方法
【发布时间】:2015-08-20 10:36:20
【问题描述】:

我目前正在这样做以将 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 从文件中获取到字典中吗?

【问题讨论】:

  • 我当然会推荐使用 json 库,而不是 ast.literal_eval,前者正是为此目的而设计的。
  • json.load 应该返回对象,而不是字符串。对.loads 的额外调用是怎么回事?

标签: python json dictionary


【解决方案1】:

您的data 必须已经是一个 JSON 字符串开头,然后您在此期间对其进行了双重编码 json.dump。当然,您稍后需要对其进行双重解码。因此,不用再次使用 JSON 编码原始 JSON,只需将其按原样写入文件即可:

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

【讨论】:

    【解决方案2】:

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

    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
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 2015-03-21
        • 1970-01-01
        • 2011-12-28
        • 2015-10-22
        • 2020-09-26
        • 1970-01-01
        • 1970-01-01
        • 2021-08-28
        • 1970-01-01
        相关资源
        最近更新 更多