Whoosh результаты поиска не Json сериализуемый

Как сделать так, чтобы результаты сериализации JSON результатов поиска Whoosh можно было возвращать клиенту?

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 DataSerializer(serializers.Serializer):

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

но возникает ошибка, что у объекта Hit нет атрибута 'icon'

1 ответ

Решение

Как указывает @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]})
Другие вопросы по тегам