刚开始使用Python,但第一个目标是创建一个Web服务。我计划使用werkzeug,但是,我将要做的就是编写一个客户端来与它进行交互。我如何在两个系统之间交换对象?是否有类似于JSON for 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);
答案 0 :(得分:4)
Python通过json
模块从2.6开始就支持原生JSON。以前的版本必须使用外部库,SimpleJson是最常见的。
答案 1 :(得分:1)
听起来你正在寻找使用pickle而不是json - pickles是Python特有的,但可以处理用户类和dicts:
>>> 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和http://yaml.org处的YAML规范
答案 2 :(得分:0)
json不能代表任意的python类。它支持数字,字符串和dicts。后者实际上与javascript中的对象相同,但它不在python中。
如果你需要JSON并且不能使用pickle,因为你想在浏览器中传递给javascript,只需json.dump()从你的对象中即时编写一个dict:
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')
并且可能通过反思进一步改善这一点。 YMMV。