2

まず、用語に関する簡単な質問ですが、
Encoding( json.dumps) は何かを json 文字列に変換することを意味し、
decoding( json.loads) は json 文字列を json 型に変換することを意味します (?)


取得したオブジェクトのリストがあります

>>> album_image_list = AlbumImage.objects.all().values(*fields)[offset:count]
>>> json.dumps(album_image_list[0], cls=DjangoJSONEncoder)
'{"album": 4, "album__title": "g jfd", "created_at": "2012-08-18T02:23:49Z", "height": 1024.0, "width": 512.0, "url_image": "http://--:8000/media/101ac908-df50-42cc-af6f-b172c8829a31.jpg"}'

しかし、リスト全体(album_image_list)で同じことをしようとすると、失敗します...

>>> json.dumps(album_image_list, cls=DjangoJSONEncoder)
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "/usr/lib/python2.6/json/__init__.py", line 237, in dumps
    **kw).encode(obj)
  File "/usr/lib/python2.6/json/encoder.py", line 367, in encode
    chunks = list(self.iterencode(o))
  File "/usr/lib/python2.6/json/encoder.py", line 317, in _iterencode
    for chunk in self._iterencode_default(o, markers):
  File "/usr/lib/python2.6/json/encoder.py", line 323, in _iterencode_default
    newobj = self.default(o)
  File "/home/--/virtualenvs/aLittleArtist/lib/python2.6/site-packages/django/core/serializers/json.py", line 75, in default
    return super(DjangoJSONEncoder, self).default(o)
  File "/usr/lib/python2.6/json/encoder.py", line 344, in default
    raise TypeError(repr(o) + " is not JSON serializable")
TypeError: [{'album': 4L, 'album__title': u'g jfd', 'created_at': datetime.datetime(2012, 8, 18, 2, 23, 49, tzinfo=<UTC>), 'height': 1024.0, 'width': 512.0, 'url_image': u'http://--:8000/media/101ac908-df50-42cc-af6f-b172c8829a31.jpg'}, {'album': 4L, 'album__title': u'g jfd', 'created_at': datetime.datetime(2012, 8, 18, 1, 54, 51, tzinfo=<UTC>), 'height': 512.0, 'width': 512.0, 'url_image': u'http://--:8000/media/e85d1cf7-bfd8-4e77-b90f-d1ee01c67392.jpg'}] is not JSON serializable
>>> 

1 つの要素で成功し、リストで失敗するのはなぜですか?

4

4 に答える 4

3

辞書を JSON にダンプするだけの場合は、json.dumps を使用してください。カスタムシリアライゼーションクラスを渡すことで、オブジェクトを簡単にシリアライズすることができます - Django には既に日付時刻を扱うものがあります:

from django.core.serializers.json import DjangoJSONEncoder
json.dumps(mydictionary, cls=DjangoJSONEncoder)
于 2013-12-01T08:18:58.693 に答える
2

.values()実際にはリストを返しません。ValuesQuerySetjsonモジュールでシリアル化できないaを返します。リストに変換album_image_listしてみてください:

json.dumps(list(album_image_list), cls=DjangoJSONEncoder)
于 2012-08-18T13:23:53.530 に答える
0

使用しているDjangoJSONEncoderはどれですか?DjangoJSONEncoderは結果のエンコーディングリストをサポートしていないようです。

これを試して:

simplejsonを使用したJSONシリアル化Djangoモデル

于 2012-08-18T13:22:13.547 に答える