【问题标题】:Converting yaml to json:TypeError: Object of type 'date' is not JSON serializable将 yaml 转换为 json:TypeError:“日期”类型的对象不是 JSON 可序列化的
【发布时间】:2018-12-13 08:44:33
【问题描述】:

我需要将 yaml 文件转换为 json。但是我得到了错误

TypeError:“日期”类型的对象不是 JSON 可序列化的

我查看了其他帖子并尝试采纳建议,但似乎没有任何效果。这是我所拥有的

import yaml
import json
import datetime

def DateEncoder(obj):
        if isinstance(obj, datetime.datetime):  
            return obj.strftime('%Y-%m-%d')  

with open('./660093.yaml') as f:
    print(json.dumps(yaml.load(f), default=DateEncoder))

TypeError: Object of type 'date' is not JSON serializable

当我检查 yaml 文件的内容时,我看到 2 行带有以下格式的日期

{'meta': {'data_version': 0.9, 'created': datetime.date(2013, 12, 20), 
'revision': 1}, 'info': {'city': 'Abu Dhabi', 'dates': [datetime.date(2013, 11, 15)], 
'gender': 'male', 'match_type': 'IT20', 'neutral_venue': 1, 'outcome': 
{'by': {'runs': 32}, 'winner': 'Ireland'}, 'overs': 20,
...
...

任何帮助将不胜感激

【问题讨论】:

    标签: python json yaml


    【解决方案1】:

    您的DateEncoder 仅处理datetime 对象,而不是date 对象。那是你的问题。

    改成这样:

    def DateEncoder(obj):
      if isinstance(obj, (datetime.datetime, datetime.date)):
          return obj.strftime('%Y-%m-%d')
    

    【讨论】:

    • 谢谢。问题不在于,我犯了一个错误。我把它作为 json.dumps(yaml.load(f)), default=DateEncoder),而不是 json.dumps(yaml.load(f), default=DateEncoder))。无论如何,当我尝试您的解决方案时,我意识到了这个错误,并且也花了 datetime.datetime 。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-06-25
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    相关资源
    最近更新 更多