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]})
如何使 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]})