2011-01-17 5 views
1

simplejsonを使ってプロパティをシリアライズして維持するには?これら二つのキーと値のペアを含む辞書の場合

str = StringProperty 
time = DateTimeProperty 

私は、JSONにそれをシリアライズデータストアに格納し、それをフェッチし、本来の特性にそれをデシリアライズします。

+0

あなたはどんな問題を抱えていますか? –

+0

私はsimplejsonのドキュメントをよく理解していません。私はdictをjsonの文字列に変換する必要があります。そして、jsonの文字列をdictに変換して戻す必要があります。 –

+0

StringProperty、DateTimePropertyなどは、特にApp Engineモデルで使用するためのプロパティクラスです。あなたは何を達成しようとしていますか?なぜJSONですか? –

答えて

2

は、このようにそれを行うにしてみてください。

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

Hmmmなので、.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

あなたの値が文字列である場合、これは単純です:値は、Googleのアプリケーションなどのカスタムクラス(からオブジェクトである場合は、しかし、

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

Engine Propertyクラス)、JSONはシリアライズ可能ではありません。

JSONは、整数/浮動小数点数、ブール値、文字列、リスト/タプル、辞書などの単純なデータ型のみをシリアル化します。詳細については、http://www.json.org/を参照してください。

JSONのシリアライズ可能な値を取得するには、シンプルなデータ型に変換する方法を定義する必要があります。たとえば、クラス名とそれらを再構築するために必要な引数を含むタプルにオブジェクトを変換します。

関連する問題