在将Python列表转换为JSON及还原时,需要强制转换吗?
当你把一堆用户对象转换成json格式,然后再把它转换回原来的样子时,是否需要进行类型转换?
把一个JavaScript的json对象转换成Python的列表对象时,有没有什么安全问题?
2 个回答
你需要写一些Python代码来对你的类进行编码和解码。你是怎么进行编码的呢?这会对你如何解码产生很大的影响。如果你使用的不是字典、列表、Unicode、字符串、整数、浮点数、布尔值和None
,Python就不会帮你处理这些事情。
编码自定义类的标准方法是创建一个继承自json.JSONEncoder
的子类,并提供一个default
方法。这个default
方法的格式是'self, obj'
,如果它知道如何编码obj
,就返回编码后的json;如果不知道,就调用super(clsname, self).default(obj)
来处理。
如果你把你的类编码成字典,那么你可以写一个函数,这个函数接受一个参数(解码后的字典),并返回从中解码得到的对象。然后把这个函数传给json.JSONDecoder
的构造函数,并在这个实例上使用decode
方法。
总的来说,json并不太适合序列化复杂的类。如果你能以某种方式捕捉到一个函数的完整状态,并将其传递给初始化方法,那就可以尝试一下;但如果不能,那你可能会觉得很头疼。
json.dumps(somepython)
这个命令可以把一个Python对象(比如说一个列表)转换成一个有效的JSON字符串。而 json.loads(ajsonstring)
则是把这个JSON字符串再转换回Python对象。这个过程是安全的,也不需要什么特别的转换。以上内容适用于Python 2.6及更高版本,使用的是标准库里的 json 模块。如果你还在用2.5版本(比如在Google App Engine上),可以使用一个类似的第三方模块 simplejson。