C'est parce que l'opérateur ->>
obtient l'élément de tableau JSON sous forme de texte. Vous avez besoin d'un cast pour reconvertir son résultat en JSON.
Vous pouvez éliminer ce cast redondant en utilisant l'opérateur ->
:
select person->'dogs'->0->'breed' from people where id = 77;