python json 序列化及反序列化
使用namedtuple
反序列化为 namedtuple
1 | import json |
序列化为 json
1 | json.dumps(x._asdict()) |
输出
1 | {"hometown": ["New York", 123], "name": "John Smith"} |
封装:
1 | def _json_object_hook(d): return namedtuple('X', d.keys())(*d.values()) |
总结:
序列化及反序列化都比较方便,但是 namedtuple
不能进行复制,不能修改
使用object_hook
反序列化为对象
1 | class JSONObject: |
获取对象属性
- 使用
getattr
1 | print getattr(a.hometown, 'id', 321) |
- 使用
try
1 | try: |
- 使用
get
1 | x = data.get('first', {}).get('second', {}).get('third', None) |
获取对象的嵌套属性
1 | def multi_getattr(obj, attr, default = None): |
1 | # coding=utf-8 |
Sync From: https://github.com/TheBigFish/blog/issues/2