如何从Whoosh搜索结果JSON序列化中获取结果,以便将数据返回给客户端?
飞快移动搜索输出(python对象列表):
[<Hit {'content': 'This is the second example.', 'path': '/b', 'icon': '/icons/sheep.png', 'title': 'Second try'}>, <Hit {'content': 'Examples are many second.', 'path': '/c', 'icon': '/icons/book.png', 'title': "Third time's the charm"}>]
执行此操作时出错:
return JsonReponse({"data": whoosh_results})
TypeError: <Hit {'content': 'This is the second example.', 'path': '/b', 'icon': '/icons/sheep.png', 'title': 'Second try'}> is not JSON serializable
我尝试过单独的课程
class DataSerializer(serializers.Serializer):
icon=serializers.CharField()
content=serializers.CharField()
path=serializers.CharField()
title=serializers.CharField()
但错误变为Hit对象没有属性'icon'
答案 0 :(得分:1)
正如@Igonato指出的那样,如果你将whoos_results
包裹在dict
中,你就可以JSON serializable
:
response = dict(whoosh_results)
return JsonReponse({"data": response)
您甚至可以删除字典的各个部分:
return JsonReponse({"content": response['content'], 'path': response['path']})
祝你好运:)
答案 1 :(得分:0)
感觉有点丑陋,但这是可行的。也许有人有更好的解决方案
return JsonReponse({"data": [dict(hit) for hit in whoosh_results]})