将用户对象列表转换为json,然后将其转换回原始状态时,是否必须进行强制转换?
是否存在获取javascript json对象并将其转换为python列表对象的安全问题?
答案 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方法的方式捕获函数的整个状态,那么就可以了,但如果没有,那么你只会伤到脑袋。