Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Django中将搜索查询结果转换为Json可序列化对象_Json_Django_Database - Fatal编程技术网

如何在Django中将搜索查询结果转换为Json可序列化对象

如何在Django中将搜索查询结果转换为Json可序列化对象,json,django,database,Json,Django,Database,我正在Django中运行一个过滤器查询,返回结果如下 search_result = [{'code': '12345', 'city': 'city1', 'country': 'USA', 'state': 'state1'}, {'code': '15675', 'city': 'city2', 'country': 'USA', 'state': 'state2'}] 我将返回的数据存储到字典中 data_dict["return_result"] = search_result d

我正在Django中运行一个过滤器查询,返回结果如下

 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的形式返回这个数据(bcz这个url是使用AJAX调用的)

在这个过程中,我得到以下错误-

[{'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
这可能会帮助您:-

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")

@Selcuk的可能重复项更新了问题。@Selcuk-据我所知,query返回的QuerySet类型对象不是Json可序列化的,而是将搜索结果转换为列表将结果转换为列表类型对象,列表类型对象是Json可序列化的。如果我的理解不正确,请评论。你是对的。您可以将其转换为列表,也可以使用下面答案中建议的特殊
DjangoJSONEncoder
。将搜索结果转换为列表效果非常好。这是一种标准的方法还是仅仅是一种破解?你能解释一下为什么你的代码有效而我的代码无效吗?你的查询结果看起来像是使用了
.values()
,对吗?尝试使用direct
.filter
,可能会有效。
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")