2011-01-17 36 views
1

对于含有这两种键 - 值对的字典:如何使用simplejson序列化和维护属性?

str = StringProperty 
time = DateTimeProperty 

我想它序列化到JSON,将其存储在数据存储区,然后取它,它反序列化到原始属性。

+0

你有什么问题? –

+0

嗯,我真的不明白simplejson文档。我需要将字典转换为json字符串(用于存储),然后我需要将json字符串转换回字典(以便获取和使用)。 –

+0

StringProperty,DateTimeProperty等是专门用于App Engine模型的属性类。你想达到什么目的?为什么选择JSON? –

回答

2

尝试做这样:

d = { 
    'str' : StringProperty, 
    'time' : unicode(DateTimeProperty) 
} 
s = simplejson.dumps(d) 
print s 
+0

嗯,所以.dumps和.loads不需要文档中指出的数据类型,或者我误解了Python如何处理dicts/strings/json。 –

+1

我不明白其中的原因,但是如果你尝试使用simplejson.dumps({'a':87}),它会很好用。但是如果你运行simplejson.dumps({'a':datetime.datetime.now()}),它会失败,所以你需要编写simplejson.dumps({'a':unicode(datetime.datetime.now()) })。这对我来说真是一个谜。 – ikostia

0

这很简单,如果你的价值观是字符串:

>>> import simplejson 
>>> print simplejson.dumps({'str': 'StringProperty', 'time': 'DateTimeProperty'}) 
{"str": "StringProperty", "time": "DateTimeProperty"} 

但是,如果值是从自定义类对象(如谷歌应用程序引擎属性类),它们不是JSON可序列化的。

JSON只序列简单数据类型,如整数/浮点数,布尔值字符串,列表/元组和字典。 (有关更多详细信息,请参见http://www.json.org/)。

为了获得JSON可序列化值,您需要定义一种方法将它们转换为简单数据类型。例如,将对象转换为包含类名和重建它们所需参数的元组。