JSONをシリアライズしてHttpResponse
オブジェクトに返すためのDjango関数を作成しようとしています。
def json_response(something):
data = serializers.serialize("json", something)
return HttpResponse(data)
私はこれを次のように使用しています:
return json_response({ howdy : True })
しかし、私はこのエラーを受け取ります:
"bool" object has no attribute "_meta"
何か案は?
編集:ここにトレースバックがあります:
更新:Pythonには独自のjsonハンドラーがあり、単にimport json
を使用する代わりにsimplejson
。
Django serializersモジュールは、Django ORMオブジェクトをシリアライズするように設計されています。通常のPython辞書をエンコードする場合は、 simplejsonを使用します。simplejsonは、まだインストールされていない場合にDjangoとともに出荷されます。
import json
def json_response(something):
return HttpResponse(json.dumps(something))
Application/javascript Content-Typeヘッダーを付けて送信することをお勧めします(application/jsonを使用することもできますが、ブラウザーでデバッグできなくなります)。
import json
def json_response(something):
return HttpResponse(
json.dumps(something),
content_type = 'application/javascript; charset=utf8'
)
HttpResponseを拡張するJsonResponseClassはどうですか?
from Django.http import HttpResponse
from Django.utils import simplejson
class JsonResponse(HttpResponse):
def __init__(self, data):
content = simplejson.dumps(data,
indent=2,
ensure_ascii=False)
super(JsonResponse, self).__init__(content=content,
mimetype='application/json; charset=utf8')
Djangoの新しいバージョンでは、Django.httpが提供するJsonResponseを使用できます。
from Django.http import JsonResponse
def my_view(request):
json_object = {'howdy': True}
return JsonResponse(json_object)
詳細は official docs で見つけることができます。
python 2.6以降ではニース JSONライブラリ があり、多くの機能があります json.dumps() オブジェクトを文字列に変換します。
したがって、次のようなことができます。
import json
print json.dumps({'howdy' : True })
import json
my_list = range(1,10) # a list from 1 to 10
with open('theJsonFile.json', 'w') as file_descriptor:
json.dump(my_list, file_descriptor) #dump not dumps, dumps = dump-string