使用JSON进行对象的序列化和反序列化

4 投票
4 回答
10484 浏览
提问于 2025-04-16 22:42

有没有什么方法或者库可以把一个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这样复杂的工具之外的最佳选择。

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

3

我只会讲Python。Python里有一个内置的库可以用来处理JSON,具体内容可以在文档中查看,链接在这里

不过,默认情况下,你不能直接把对象转换成JSON格式,也不能把JSON格式转换回对象,只能处理字典(dict)、列表(list)和一些简单的数据类型。如果想要处理其他对象,你需要自己写一些特定的编码器来实现。这些内容在文档里都有详细说明。

撰写回答