使用JSON序列化和反序列化对象

时间:2011-08-02 06:31:27

标签: python json serialization actionscript deserialization

是否有一种方法或库可以将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 个答案:

答案 0 :(得分:3)

我只能说Python。有一个用于JSON访问的内置库,可以在文档here中查看。

不幸的是,开箱即用,您无法序列化/反序列化对象,只需dictlist和简单类型。您必须编写特定的对象编码器才能执行此操作。这几乎在文档中有所涉及。

答案 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那样重要的东西。

http://code.google.com/p/ason/

答案 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时,我必须始终这样做。