我之前有一个问题,我删除了这个问题。因为我错误地假设它与dateutil版本有关。
test1 = dateutil.parser.parse("2013-01-24T16:50:42+00:00")
这工作正常,我得到了一个日期时间。
但
dthandler = lambda obj: obj.isoformat() if isinstance(obj, datetime.datetime) else None
test2 = json.dumps(event.due_date_time, default=dthandler)
print test2
--> "2013-01-24T16:50:42+00:00"
在我看来,这就像一个普通的字符串
test3 = dateutil.parser.parse(test2)
这崩溃说ValueError: unknown string format
那么如何将 json 字符串转换为"普通"字符串呢?
你忘记了JSON在字符串两边加上引号。您具有以下值:
jsonvalue = '"2013-01-24T16:50:42+00:00"'
请注意那里的双引号。
您需要再次使用 json.loads()
方法加载该值,在这种情况下,该方法只会再次删除引号:
>>> print json.loads(jsonvalue)
2013-01-24T16:50:42+00:00
请注意,现在引号又消失了。如果您有混合,您也可以用.strip('"')
去除引号:
>>> print jsonvalue.strip('"')
2013-01-24T16:50:42+00:00
但是既然您期望JSON数据,为什么不将其视为JSON数据并使用json
模块将其转回Python数据。
引号在字符串中(打印不会添加它们)。
所以test3 = dateutil.parser.parse(test2[1:-1])
会起作用。