2016-12-07 5 views
1

Djangoでフィルタクエリを実行していて、返された結果は次のとおりです。検索クエリの結果をDjangoのJsonシリアライズ可能オブジェクトに変換する方法

search_result = [{'code': '12345', 'city': 'city1', 'country': 'USA', 'state': 'state1'}, {'code': '15675', 'city': 'city2', 'country': 'USA', 'state': 'state2'}] 

私はこの返されたデータを辞書に保存しました。

data_dict["return_result"] = search_result 
data_dict["is_success"] = True 

は、今私はJsonResponseとしてこのdata_dictを返しています。(bczこのURLは、AJAXを使用して呼ばれていました)。私は、エラーの下に取得しています。このプロセスで

JsonResponse(data_dict) 

- 上記は、データを述べ

[{'code': '12345', 'city': 'city1', 'country': 'USA', 'state': 'state1'}, {'code': '15675', 'city': 'city2', 'country': 'USA', 'state': 'state2'}] is not JSON serializable. 

ために単一引用符で有効なJSONではありません。すべての一重引用符を二重引用符で置き換えると、これは有効なjsonです。

有効なjsonまたは検索クエリに変換できる方法はありますか。有効なjsonが返されます。

フルスタックトレース:

Traceback (most recent call last): 
    File "/home/rana/DjangoProject/VirtualEnv/e/lib/python3.4/site-packages/django/core/handlers/base.py", line 149, in get_response 
    response = self.process_exception_by_middleware(e, request) 
    File "/home/rana/DjangoProject/VirtualEnv/e/lib/python3.4/site-packages/django/core/handlers/base.py", line 147, in get_response 
    response = wrapped_callback(request, *callback_args, **callback_kwargs) 
    File "/home/rana/DjangoProject/VirtualEnv/e/lib/python3.4/site-packages/django/contrib/auth/decorators.py", line 23, in _wrapped_view 
    return view_func(request, *args, **kwargs) 
    File "/home/rana/DjangoProject/Sanstha/sansthaonline/tenant/views/zip_city_search.py", line 37, in search_zip_city 
    return JsonResponse(context) 
    File "/home/rana/DjangoProject/VirtualEnv/e/lib/python3.4/site-packages/django/http/response.py", line 505, in __init__ 
    data = json.dumps(data, cls=encoder, **json_dumps_params) 
    File "/usr/lib/python3.4/json/__init__.py", line 237, in dumps 
    **kw).encode(obj) 
    File "/usr/lib/python3.4/json/encoder.py", line 192, in encode 
    chunks = self.iterencode(o, _one_shot=True) 
    File "/usr/lib/python3.4/json/encoder.py", line 250, in iterencode 
    return _iterencode(o, 0) 
    File "/home/rana/DjangoProject/VirtualEnv/e/lib/python3.4/site-packages/django/core/serializers/json.py", line 115, in default 
    return super(DjangoJSONEncoder, self).default(o) 
    File "/usr/lib/python3.4/json/encoder.py", line 173, in default 
    raise TypeError(repr(o) + " is not JSON serializable") 
TypeError: [{'city': 'city1', 'country': 'USA', 'code': '12345', 'state': 'state1'}, {'city': 'city2', 'country': 'USA', 'code': '15675', 'state': 'state2'}] is not JSON serializable 
+0

[シリアライズ可能なJSONではありません]の可能な重複(http://stackoverflow.com/questions/16336271/is -not-json-serializable) – Selcuk

+0

@Selcukが質問を更新しました。 – User42

+0

@Selcuk - 私の理解通り、Json SerializableではないQuerySet型のオブジェクトが返されますが、search_resultをlistに変換すると結果がJson Serializableのリスト型オブジェクトに変換されます。ここで私の理解が間違っているとコメントしてください。 – User42

答えて

1

これはあなたを助けるかもしれない: -

import json 
from django.shortcuts import HttpResponse 
from django.core.serializers.json import DjangoJSONEncoder 

search_result = [{'code': '12345', 'city': 'city1', 'country': 'USA', 'state': 'state1'}, {'code': '15675', 'city': 'city2', 'country': 'USA', 'state': 'state2'}] 


data = {'is_success':True,'msg':'Yor Success message','return_result':list(search_result)} 

return HttpResponse(json.dumps(data,cls=DjangoJSONEncoder),content_type="application/json") 
+0

検索結果を一覧に変換すると非常にうまくいった。これを行う標準的な方法ですか、ちょうどハックですか? あなたのコードがうまく動作し、私のコードがうまく動作しない理由を説明してください。 – User42

+0

あなたのクエリ結果は、あなたが '.values()'を使ったように見えますか?直接 '.filter'を使ってみてください。動作しているかもしれません。 –

関連する問題