使用JSON进行对象的序列化和反序列化
有没有什么方法或者库可以把一个JSON字符串转换成一个有类型的对象,适用于ActionScript和Python?
比如说:
class Person
{
String name;
int age;
}
Person person = new Person("John", "22");
String jsonString = JSON.Serialize(person);
Person person2 = (Person) JSON.Deserialize(jsonString);
最后一句话的意思是,把我们在把jsonString转换后得到的对象,强制转换成一个Person对象。
4 个回答
2
请试试这个:
import json
class Serializer:
@staticmethod
def encode_obj(obj):
if type(obj).__name__ =='instance':
return obj.__dict__
@staticmethod
def serialize(obj):
return json.dumps(obj, default=Serializer.encode_obj)
class TestClass:
def __init__(self):
self.a = 1
t = TestClass()
json_str = Serializer.serialize(t)
2
对于AS3,你可以使用Mike Chambers开发的as3corelib库。
https://github.com/mikechambers/as3corelib/tree/master/src/com/adobe/serialization/json
编辑:经过一番搜索,我又回到了StackOverflow上,找到了这个问题:Typed AS3 JSON Encoder and Decoder? 似乎有一个库可以进行类型化的反序列化,但它并不是特别稳定,对某些数据类型会出错。如果你觉得自己能应对这些限制,那么这可能是除了自己写解析器或使用像BlazeDS这样复杂的工具之外的最佳选择。
3
我只会讲Python。Python里有一个内置的库可以用来处理JSON,具体内容可以在文档中查看,链接在这里。
不过,默认情况下,你不能直接把对象转换成JSON格式,也不能把JSON格式转换回对象,只能处理字典(dict
)、列表(list
)和一些简单的数据类型。如果想要处理其他对象,你需要自己写一些特定的编码器来实现。这些内容在文档里都有详细说明。