背景
为什么写这篇话题呢,印象中是有次面试中,面试官问我是否了解 Flask
中的序列化与反序列化。由于自身的客观原因,当时对于该问题只能硬着头皮回答:不太了解乀(ˉεˉ乀) 乀(ˉεˉ乀) 。。。(个人觉得还是:基础知识不扎实)
后来这个问题也一直没去关注。。。此次突然想起来后进行一下记录(同样的地方不要翻车两次┑( ̄。。 ̄)┍ )。
行动
大概先了解了下相关定义:Serialization
和 Deserialization
即序列化和反序列化。Flask中是将对象类型数据转为json即为序列化,将json转为对象类型数据即为反序列化。
Flask中的序列化和反序列化还是比较简单,下面分别进行下理解。
序列化 jsonify()
Flask jsonify()的代码还是很简单, 可以理解在默认情况下,Flask的序列化就是直接使用了 json.dumps()
,再通过 Response
对象直接返回了 ╮(╯Д╰)╭ ,核心代码如下:
1 | # 唯一就是在用法上有点区别, Flask的jsonify会对传入的参数进行取舍,具体逻辑如下 |
看到网上其他人说了一些更深层次的内容, 参考链接,参考链接2:
1 | # 默认情况下用的都是 app.json_encoder, 如果有特殊需求,可以对该encoder进行自定义 |
反序列化 request.get_json()
同样的。。。 Flask的反序列化也挺简单,可以理解在默认情况下, Flask的反序列化就是直接使用了 json.loads()
,核心代码如下:
1 | data = self._get_data_for_json(cache=cache) |
总结
额。。。本来以为是什么,实际查了下对应的资料后,从比较浅的层次来说, Flask中的序列化以及反序列化实际就是使用的 json库中自带的 dumps
和 loads
。(也可能是才疏学浅,没有太了解深层次的使用场景😂, 比如: Flask序列化),所以,不要被一些 “名词” 高大上的样子忽悠了,可能实际内容并不复杂,困难的是做出去解决这个问题的决心。