如何将嵌套字典写入 JSON 文件?

时间:2021-03-26 18:17:32

标签: python json dictionary nested

ohlc={58072071: {datetime.datetime(2021, 3, 26, 23, 20):
                    {'high': 179.0, 'low': 179.0, 'open': 179.0, 'close': 179.0,
                     'volume': 2354}}}

如何将本字典写入 JSON 文件?

当我将其转储到 JSON 文件时出现此错误

    TypeError(f'keys must be str, int, float, bool or None, '
TypeError: keys must be str, int, float, bool or None, not datetime

1 个答案:

答案 0 :(得分:0)

正如我在评论中所说,问题不是由于存在嵌套字典,而是因为它们包含的数据未映射到 json 模块中的 table 中显示的 JSON 对象文档。

这是一种使用 datetime.strftime() 函数自动将它们转换为字符串的方法。

from datetime import datetime
import json


DATE_FMT = '%Y-%m-%d %H:%M'

def decode_dict(d):
    result = {}
    for key, value in d.items():
        if isinstance(key, datetime):
            key = datetime.strftime(key, DATE_FMT)
        if isinstance(value, datetime):
            value = datetime.strftime(value, DATE_FMT)
        elif isinstance(value, dict):
            value = decode_dict(value)  # Recursive call.
        result.update({key: value})
    return result


if __name__ == '__main__':

    ohlc = {58072071: {datetime(2021, 3, 26, 23, 20):
                        {'high': 179.0, 'low': 179.0, 'open': 179.0, 'close': 179.0,
                         'volume': 2354}}}

    print(json.dumps(decode_dict(ohlc)))

输出:

{"58072071": {"2021-03-26 23:20":
                {"high": 179.0, "low": 179.0, "open": 179.0, "close": 179.0,
                 "volume": 2354}}}
}