web-dev-qa-db-ja.com

リストをJSONにシリアル化する

クライアントとDjangoサーバー間で情報を送信しています。これにJSONを使用したいと思います。単純な情報-文字列のリストを送信しています。Django.core.serializers、しかし、私がやったとき、私は得た

AttributeError: 'str' object has no attribute '_meta'

これはDjangoオブジェクトにのみ使用できるようです。シンプルなPythonオブジェクト?

43
gruszczy

Pure Pythonを使用してそれを行うことができます:

import json
list = [1, 2, (3, 4)] # Note that the 3rd element is a Tuple (3, 4)
json.dumps(list) # '[1, 2, [3, 4]]'
83
Emil Ivanov

Python 2.5を使用する場合、simplejsonをインポートする必要がある場合があります。

try:
    import json
except ImportError:
    import simplejson as json
7
reech

はい、しかし、あなたはDjangoオブジェクトについてどうしますか?単純なjsonはそれらを窒息させる傾向があります。

オブジェクトが個別のモデルオブジェクト(クエリセットなどではない)の場合、次のようにモデルオブジェクトタイプとpkをときどき格納しました。

seralized_dict = simplejson.dumps(my_dict, 
                     default=lambda a: "[%s,%s]" % (str(type(a)), a.pk)
                     )

逆シリアル化するには、model.objects.get()で参照されるオブジェクトを再構築できます。これは、dictが保存されているタイプのオブジェクトの詳細に関心がある場合には役立ちませんが、どのオブジェクトが関係していたかを知る必要がある場合に効果的です。

3
adobelis