嗖的搜索结果不是Json序列化的

时间:2017-05-22 08:53:36

标签: python json django serialization whoosh

如何从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'

2 个答案:

答案 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]})