0

私は次のコードを持っています:

data = {'services': [u'iTunes'], 
        'orders': [u'TestOrder', u'Test_April_Titles_iTunes'],
        'providers': ''}

return HttpResponse(simplejson.dumps(data))

File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/json/encoder.py" in default
  178.         raise TypeError(repr(o) + " is not JSON serializable")

Exception Type: TypeError at /reports/change_dropdown/
Exception Value: [u'iTunes'] is not JSON serializable

リストを含むこの辞書をシリアル化するには、何をする必要がありますか?

4

2 に答える 2

1

問題は、それitunesが非JSON互換タイプであるということです。

解決するには、シリアル化時に非JSON互換タイプを変換するデフォルトタイプを提供します。

simplejson.dumps(data, default=str))

あるいは:

def handler(val):
    if isinstance(val, unicode)
        return str(val)
    else:
        return val

simplejson.dumps(data, default=handler))

2番目のオプションの利点は、セット(たとえば、リストに変換)、日付(たとえば、int timetstampに変換)などを処理できることです。

于 2013-03-27T13:02:42.540 に答える
0

unicodeからへの変換strはここで機能しました:

data['services'] = [str(item) for item in data['services']]
data['orders'] = [str(item) for item in data['orders']]
data['providers'] = [str(item) for item in data['providers']]
于 2013-03-26T21:13:01.980 に答える