是否有一种方法或库可以将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对象后得到的对象。
答案 0 :(得分:3)
我只能说Python。有一个用于JSON访问的内置库,可以在文档here中查看。
不幸的是,开箱即用,您无法序列化/反序列化对象,只需dict
,list
和简单类型。您必须编写特定的对象编码器才能执行此操作。这几乎在文档中有所涉及。
答案 1 :(得分:2)
对于AS3,您可以使用Mike Chambers的as3corelib。
https://github.com/mikechambers/as3corelib/tree/master/src/com/adobe/serialization/json
编辑:经过一些谷歌搜索后,我在这个问题上回到了SO:Typed AS3 JSON Encoder and Decoder?似乎有一个用于进行类型反序列化的库,但它并不完全可靠并且失败在某些数据类型上。如果你认为你可以处理这些限制,那么它可能是最好的选择,而不是编写你自己的解析器或者像BlazeDS那样重要的东西。
答案 2 :(得分: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)
答案 3 :(得分:0)
简短回答:不,没有。 JSON不包括类型对象,除了一些像Arrays之类的对象。 as3Corelib确实识别这些。但正如您所提到的,您将获得一个具有名称值对的Object。由于JSON不包含您的自定义actionscript类,因此没有自动方法将JSON对象转换为类型化的actionscript对象。
as3corelib是Flash中JSON的一个很棒的实用程序。然而,最新版本的Flash播放器(版本10.3)包含JSON作为本机数据类型。
但是创建一个带有将JSON对象作为参数的构造函数的类并不是很困难,您可以将其解析为类变量。在使用facebook Graph API时,我必须始终这样做。