2011-10-20 18 views
0

刚开始使用Python,但第一个目标是创建一个Web服务。我打算为此使用werkzeug,但是,我将要做的就是编写一个客户端来与它交互。我将如何去交换这两个系统之间的物体?有没有类似于Python的JSON?Python的数据交换?

编辑: 几个提到的JSON,但我的主要问题是,我不能序列化一个类?我觉得这是JSON可以做的事情吗?

class User(): 
    def __init__(self, first, last, age): 
     self.first = first 
     self.last = last 
     self.age = age 

user = User("John", "Doe", 25) 
json.dumps(user) 

TypeError: <__main__.User instance at 0x02ABBEE0> is not JSON serializable

我知道你在序列化JSON中不一定是一个类,它是一个对象,但你仍然可以参考它几乎是这样的:

var mailingAddress = { 
    "Address" : "123 Anywhere St.", 
    "City"  : "Springfield", 
    "PostalCode" : 99999 
}; 
alert("The package will be shipped to postal code " + mailingAddress.PostalCode); 
+1

只是一个简单的说明:尽管名称不同,JSON仍然是独立于语言的。向下滚动到http://json.org/的底部,显示许多语言都有JSON库。 :) –

+1

您的单独问题应该是一个单独的问题。 –

回答

1

听起来你正在寻找使用泡菜来代替JSON的 - 泡菜是Python的具体,但可以处理用户类和类型的字典:

>>> class User(): 
    def __init__(self, first, last, age): 
     self.first = first 
     self.last = last 
     self.age = age 

>>> user = User("John", "Doe", 25) 
>>> import pickle 
>>> s = pickle.dumps(user) 
>>> del user 
>>> user = pickle.loads(s) # reconstruct the object 
>>> print vars(user) 
{'age': 25, 'last': 'Doe', 'first': 'John'} 

如果你需要一个变体是独立的语言,看在PyYAML和YAML规范http://yaml.org

+0

正是我需要的,谢谢。 Pickle可以工作,但更重要的是,最终我打算添加一个API,所以也许我想看看YAML。 – esac

4

的Python自2.6以来,通过json模块支持本机JSON支持。以前的版本不得不使用外部库,SimpleJson是最常见的。

0

json不能代表任意的python类。它支持数字,字符串和字典。后者实际上与javascript中的对象相同,但它不在python中。

如果您需要JSON因为你要提供给JavaScript在浏览器不能用咸菜,只是那样json.dump()从你的对象由上飞的字典:

json.dumps({ 
    'first': user.first, 
    'last': user.last, 
    'age': user.age, 
}) 

如果你想你可以创建助手来减少一些重复。

def dumpObject(obj, *properties): 
    data = dict((p, getattr(obj, p)) for p in properties) 
    return json.dumps(data) 

dumpObject(user, 'first,' 'last', 'age') 

并可能通过反思进一步改善。因人而异。