Podle dokumentů Django JSONField to vysvětluje, že data
struktura odpovídá nativnímu formátu pythonu, s mírně odlišným přístupem při dotazování.
Pokud znáte strukturu JSON, můžete také filtrovat klíče, jako by šlo o související pole:
object.filter(data__animal='cat')
object.filter(data__name='tom')
Podle přístupu k poli:
object.filter(data__0__animal='cat')
Váš příklad obsahuje je téměř správný, ale vaše data jsou v seznamu a vyžadují:
object.filter(data__contains=[{'animal': 'cat'}])