将python列表转换为json并返回时,你会投射吗?

时间:2010-09-11 01:52:02

标签: python security json

将用户对象列表转换为json,然后将其转换回原始状态时,是否必须进行强制转换?

是否存在获取javascript json对象并将其转换为python列表对象的安全问题?

2 个答案:

答案 0 :(得分:2)

json.dumps(somepython)为您提供了一个有效的JSON字符串,表示Python对象somepython(可能完全是一个列表),而json.loads(ajsonstring)则反过来 - 两者都没有任何安全性问题也不是“演员”(?)。这是使用Python 2.6或更高版本,使用标准库中的json模块。如果您坚持使用2.5(例如,在Google App Engine上使用),则可以使用等效的第三方模块simplejson

答案 1 :(得分:1)

您将负责编写python以对您的类进行编码和解码。你是怎么编码的?这将对你如何解码它们产生重大影响。如果你超越dicts,list,unicode,strings,int,floats,booleans和None,Python将不会为你做任何事。

编码自定义类的规范方法是子类json.JSONEncoder并提供default方法。 default方法具有签名'self, obj',如果知道如何,则返回json中编码的obj,如果不知道则返回super(clsname, self).default(obj)

如果您将类编码为dicts,那么您可以编写一个接受一个参数(已解码的字典)的函数,并从中返回已解码的对象。然后将此函数传递给json.JSONDecoder的构造函数,并在该实例上使用decode方法。

总而言之,json不适合序列化复杂类。如果你能够以一种可以传递给init方法的方式捕获函数的整个状态,那么就可以了,但如果没有,那么你只会伤到脑袋。