
之前写 py 关于 JSON 的序列化都是用字典来操作,比较不方便,今儿实现下 json->object 的序列化方式,发现还挺方便,分享给大家。py 菜鸟,大佬轻喷。。。使用方法如下:
核心类:
class JsonClass(object): def to_json_string(self): return json.dumps(self, default=lambda obj: obj.__dict__) def from_json_string(self, json_string): data = json.loads(json_string) for key in self.__dict__.keys(): setattr(self, key, data[key]) 使用方法:
class Task(JsonClass): def __int__(self, id=None, name=None, timestamp=None): self.id = id self.name = name self.timestamp = timestamp if __name__ == '__main__': # 序列化 task = Task(1, "a", time.time()) print(task.to_json_string()) # 反序列化 json_string = '{"timestamp": 1560948789.5293133, "name": "a", "id": 1}' task = Task() task.from_json_string(json_string) 1 pushyzheng OP 搭配 py3.6 类型标记食用更佳 |
2 xiangyuecn 2019 年 6 月 19 日 看标题还以为是自己写的解析,没想到还是调用的 api |
3 rogwan 2019 年 6 月 19 日 对比 字典 <--> json 的方式,是由性能优势?还是空间优势? |
4 siteshen 2019 年 6 月 19 日 两点建议: 1. 类名叫 JsonSerializableMixin,否则看到类名 JsonClass 会觉得是个特别重大的功能; 2. from_json_string 改为 class method,因为 from_json_string 的意思其实是 create OBJECT from json string,所以由这个函数负责创建对象。如果函数名是类似 update_with_json_string 则没这个意义不明确的问题。 |
5 misaka19000 2019 年 6 月 19 日 。。。鼓励一下 |
6 BingoXuan 2019 年 6 月 19 日 然而实质还是序列化和反序列化字典,因为字典是最接近 json 的结构的。lz 可以试一下这个,访问字典值如同访问对象属性。json.dumps 依旧有效。 https://stackoverflow.com/questions/4984647/accessing-dict-keys-like-an-attribute 尽管如此,我还是觉得 python 缺乏 struct 那样简单的构造数据的方法。 |
8 yushenglin 2019 年 6 月 20 日 DRF 的序列化器了解一下 |