Secondo i documenti Django JSONField, spiega che i data
la struttura corrisponde al formato nativo di Python, con un approccio leggermente diverso durante la query.
Se conosci la struttura del JSON, puoi anche filtrare sulle chiavi come se fossero campi correlati:
object.filter(data__animal='cat')
object.filter(data__name='tom')
Per accesso all'array:
object.filter(data__0__animal='cat')
Il tuo esempio contiene è quasi corretto, ma i tuoi dati sono in un elenco e richiede:
object.filter(data__contains=[{'animal': 'cat'}])