web-dev-qa-db-ja.com

Python辞書をJSONシリアル化するにはどうすればよいですか?

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"

何か案は?

編集:ここにトレースバックがあります:

http://dpaste.com/38786/

41
Deniz Dogan

更新: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'
    )
65
Simon Willison

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')
32
Filippo Vitale

Djangoの新しいバージョンでは、Django.httpが提供するJsonResponseを使用できます。

from Django.http import JsonResponse

def my_view(request):
    json_object = {'howdy': True}
    return JsonResponse(json_object)

詳細は official docs で見つけることができます。

8

python 2.6以降ではニース JSONライブラリ があり、多くの機能があります json.dumps() オブジェクトを文字列に変換します。

したがって、次のようなことができます。

import json
print json.dumps({'howdy' : True })
5
Salvador Dali
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
1
Waqas