Whoosh 搜索结果无法 Json 序列化

Whoosh search results not Json serializable

如何使 Whoosh 搜索结果 JSON 可序列化,以便我可以 return 将该数据返回给客户端?

Whoosh 搜索输出(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

class DataSerializer(serializers.Serializer):

    icon=serializers.CharField()
    content=serializers.CharField()
    path=serializers.CharField()
    title=serializers.CharField()

但是错误变成Hit对象没有属性'icon'

正如@Igonato 指出的那样,如果将 whoos_results 包装在 dict 中,则可以使它们 JSON serializable:

response = dict(whoosh_results)
return JsonReponse({"data": response)

您甚至可以将字典的各个部分取出:

return JsonReponse({"content": response['content'], 'path': response['path']})

祝你好运:)

感觉有点难看,但这行得通。也许有人有更好的解决方案

return JsonReponse({"data": [dict(hit) for hit in whoosh_results]})