将用户对象列表转换为json,然后将其转换回原始状态时,您是否必须投射?当一个python列表转换为json并返回时,你施放了什么?
是否存在将JavaScript json对象转换为python列表对象的任何安全问题?
将用户对象列表转换为json,然后将其转换回原始状态时,您是否必须投射?当一个python列表转换为json并返回时,你施放了什么?
是否存在将JavaScript json对象转换为python列表对象的任何安全问题?
您将负责编写python来对您的类进行编码和解码。你如何编码它们?这将对你如何解码他们有很大的影响。如果你超越了字典,列表,Unicode,字符串,整数,浮点数,布尔值和None
,Python不会为你做任何事情。
对自定义类进行编码的规范方法是子类json.JSONEncoder
并提供default
方法。 default
方法的签名为'self, obj'
,并返回obj
编码在json中,如果它知道如何并返回super(clsname, self).default(obj)
如果没有。
如果您将类编码为字典,那么您可以编写一个接受一个参数(解码字典)的函数并从中返回解码对象。然后将该函数传递给json.JSONDecoder
的构造函数,并在该实例上使用decode
方法。
总而言之,json并不适合串行化复杂的类。如果你可以捕捉整个函数的状态,以便它可以传递给init方法,那么就可以使用它,但如果没有,那么你只会伤到你的头。
json.dumps(somepython)
给你代表Python对象somepython
(它可以非常清楚是列表)和json.loads(ajsonstring)
走另一条路“圆一个有效的JSON字符串 - (?)都没有任何安全问题,也不是‘投’。在Python 2.6或更高版本中,使用标准库中的json模块。如果您遇到2.5(例如,用于Google App Engine),则可以使用等效的第三方模块simplejson。
你所说的对于用户定义的类是完全不正确的。你必须实现一个自定义编码器来完成这个工作。 – aaronasterling 2010-09-11 02:40:06
@aaron,'json.loads'将_never_返回“用户定义的类”--JSON标准中没有这样的东西,所以,这不是很明显吗?因此,如果并且当你想要转储任何东西,但是JSON定义的类型(和/或从JSON重新加载到非JSON定义的类型),显然你需要选择和编码你自己的专有编码(大概是为了知道交易另一端的Javascript也是如此;-)。这完全不限于用户定义的类,顺便说一句:大量Python自带的内置类型(例如,复数!)也超出了JSON标准。 – 2010-09-11 05:13:37
绝对正确。正如我应该在我的原始评论中指出的那样,OP正在询问用户定义的类的编码实例。 – aaronasterling 2010-09-11 05:26:24
如果你评估它,只会有一个安全问题。 – 2010-09-11 02:01:29