ror*_*ycl 2 python datetime json namedtuple
我有一个嵌套的Python数据结构,其中带有datetime.datetime对象和namedtuples的内容如下:
from datetime import datetime as dt
from datetime import timedelta
from collections import namedtuple
nt = namedtuple('n', 'name, contact')
f1 = nt('jules', '1234')
f2 = nt('dan', '5678')
x = [
[dt.now() + timedelta(minutes=1), f1],
[dt.now() + timedelta(hours=1), f2],
]
Run Code Online (Sandbox Code Playgroud)
和一个编码器是这样的:
import json
class TestEncoder(json.JSONEncoder):
def default(self, obj):
if hasattr(obj, 'isoformat'):
return obj.isoformat()
else:
return json.JSONEncoder.default(self, obj)
Run Code Online (Sandbox Code Playgroud)
print json.dumps(x, cls=TestEncoder) 输出:
[["2012-06-21T00:48:03.296381", ["jules", "1234"]],
["2012-06-21T01:47:03.296423", ["dan", "5678"]]]
Run Code Online (Sandbox Code Playgroud)
我想将namedtuples转换为dict(大概使用namedtuple ._asdict()方法),以获得以下输出:
[["2012-06-21T00:48:03.296381", {"name":"jules", "contact":"1234"}],
["2012-06-21T01:47:03.296423", {"name":"dan", "contact":"5678"}]]
Run Code Online (Sandbox Code Playgroud)
如何保留常规数据结构,但是json将namedtuples转储为dict?
重新阅读文档后,使用内置的jsonlib 似乎是不可能的,因为唯一的覆盖机制(default)仅在已知类型(包括元组)之后被调用
simplejson通过给您一个namedtuple_as_object标志来使这个琐碎simplejson.dump
simplejson.dumps(x, cls=TestEncoder, namedtuple_as_object=True)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1947 次 |
| 最近记录: |