python - 将具有日期时间值的字典的字符串表示形式转换回字典

标签 python json string datetime dictionary

我有字典的字符串表示形式。它是一个嵌套字典,甚至更复杂,其中 record_time 键具有如下所示的日期时间值:

d = """{
    "motion_measure": {"INCAR": 69, "RANDOM": 63, "UNKNOWN": 62, "BIKING": 57, "WALKING": 48, "RUNNING": 41, "SEDENTARY": 0},
    "samples": [0, 1.1791444, 11.036073],
    "record_time": datetime.datetime(2018, 3, 26, 10, 3, 17, 441000)
    }"""

我按照建议尝试了两种方法 in this related question :

import ast

ast.literal_eval(d)

ast.literal_eval 不起作用,因为它无法处理日期时间值。

import json

json.loads(d) 

json.loads 也不起作用,因为日期时间格式不可反序列化。

有人知道使用 Python 将其转换回 dict 或 json 的好方法吗?我从 OrientDB 得到了这种奇怪的记录格式。

最佳答案

由于您的字符串接近 json,因此您可以稍微清理一下并使用 json.loads (并避免 eval)。

例如,如果您可以将日期时间值转换为列表,那么一种方法是在转换为之前替换字符串中 datetime.datetime(...) 的所有实例字典(下面的示例使用正则表达式来处理替换)。然后,您可以使用 datetime 来处理结果字典中的日期时间列表。

例如(向输入字符串添加额外的日期时间,以确保替换处理多个日期时间出现和没有指定毫秒的日期时间等):

import datetime
import re
import json

s = """{
    "motion_measure": {"INCAR": 69, "RANDOM": 63, "UNKNOWN": 62, "BIKING": 57, "WALKING": 48, "RUNNING": 41, "SEDENTARY": 0},
    "samples": [0, 1.1791444, 11.036073],
    "record_time": datetime.datetime(2018, 3, 26, 10, 3, 17, 441000), 
    "another_time": datetime.datetime(2017, 3, 26, 10, 3)
    }"""

# re.sub to replace datetime; json.loads to convert to dict
d = json.loads(re.sub(r'datetime\.datetime\(([^)]*)\)', r'[\1]', s))

# datetime.datetime(...) to work with resulting datetime lists
date1 = datetime.datetime(*d['record_time'])
date2 = datetime.datetime(*d['another_time'])

print(d)
# OUTPUT (shown on multiple lines for readability)
# {
# 'motion_measure': {'INCAR': 69, 'RANDOM': 63, 'UNKNOWN': 62, 'BIKING': 57, 'WALKING': 48, 'RUNNING': 41, 'SEDENTARY': 0},
# 'samples': [0, 1.1791444, 11.036073],
# 'record_time': [2018, 3, 26, 10, 3, 17, 441000],
# 'another_time': [2017, 3, 26, 10, 3]
# }

print(date1)
print(date2)
# OUTPUT
# 2018-03-26 10:03:17.441000
# 2017-03-26 10:03:00

关于python - 将具有日期时间值的字典的字符串表示形式转换回字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52858065/

相关文章:

json - Spray 客户端将自定义案例类编码为 JSON

c++ - 找出字符串是否仅包含给定字符集的最佳方法/算法

python - 使用 Python 编写 MS Office 宏?

python - 使用 GitPython 从远程存储库中克隆所有分支的存储库

javascript - 将数组值分配给顶级对象 javascript

json - 从 grails 1.3.4 升级到 grails 2.1.1 后无法使用 "as JSON"

python - 无法从本地主机访问 Django

python - 如何使用 PyCharm 运行文档测试?

R:当电子邮件有多个域名后缀时,如何将电子邮件拆分为多个部分?

c - 在文件 C 中查找字符串的子字符串