从变量中删除datetetime对象并转换为字符串

时间:2018-06-13 03:59:25

标签: python json

以下是我作为数据框和json类型使用的示例数据:

d = {'mw': [600], 'datetime': ["2002-01-01"]}
json_data = {'mw': 600, 'datetime':["2002-01-01"]}

我想通过json.dump导出json_data。但是,当我导出文件时,我收到错误:

with open(dir_path + '/Visualizations/json/' + 'gen_type_box.json', 'w') as outfile:
json.dump(json_data, outfile)

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

因此,我继续将导致问题的列转换为初始数据框中的字符串,并再次将其转换为JSON:

d['datetime'] = d.index
d['datetime_str'] = d['datetime'].apply(lambda x: x.strftime('%Y-%m-%d'))

删除旧的'日期时间'变量,以便JSON无法混淆:

d = d[['mw','datetime_str']]

然而,当我打印出变量d [' datetime_str']以查看它是否有效时,它仍然看起来像一个日期时间变量并且它仍然给我相同的错误!为什么我不能将此datetime变量转换为字符串?我错过了什么?

**编辑:解决了以下答案**

我使用下面的答案来解决效果很好的问题。然后我有几个与numpy int相关的其他错误。 ' mw'示例数据框中的变量是" numpy.int64"所以我使用" np.asscalar()"确保我有JSON可以使用的Python内容。

1 个答案:

答案 0 :(得分:0)

from datetime import datetime
import json
a = {'event': 'login', 'times_stamp': datetime.today()}
print(a)

a['times_stamp'] = a['times_stamp'].strftime("%Y-%m-%d")

print(a)
with open('try_file.json', 'w') as ffp:
    json.dump(a, ffp)
    ffp.flush()
ffp.close()

输出:

{'event': 'login', 'times_stamp': datetime.datetime(2018, 6, 13, 11, 8, 39, 998022)}
{'event': 'login', 'times_stamp': '2018-06-13'}

Process finished with exit code 0

您能否详细解释一下虚拟数据,您是如何正确处理这个问题的?