我如何反序列化动态复杂的 json 对象

问题描述 投票:0回答:2

所以现在我有一个模块化系统用于与我的

Game()
对象交互,它处理游戏的所有数据存储。现在我正在开发一个系统,用于将 Game 对象的所有属性保存到 json 文件中。我已经想出使用

序列化整个对象

save_json = json.dumps(G.__dict__, indent=4, default=lambda o: o.__dict__)

我现在的问题是反序列化,因为我的游戏对象是模块化的,我不知道对象内部将有什么样的嵌套对象,我需要一个动态系统来加载它们。最重要的是,Game 对象的一些属性是字典,一些是列表,一些只是变量。

我查找过的所有解决方案最终都会将反序列化硬编码到对象的

__init__
中,这对我不起作用,因为我的系统是模块化的。

python json
2个回答
0
投票

这确实是

pickle
的设计目的

save_data = pickle.dumps(g)

...

loaded_g = pickle.loads(save_data)

但是如果您决定使用 json...也许以下内容会起作用

g = Game()
g.__dict__.update(json.loads(save_game))

0
投票

我想提一下,pickle 并不安全,这是 ti 如何导致 RCE 的示例:https://knowledge-base.secureflag.com/vulnerability/unsafe_deserialization/unsafe_deserialization_python.html

© www.soinside.com 2019 - 2024. All rights reserved.