Oui, c'est possible :
SELECT *
FROM tbl t, json_array_elements(t.json_col->'emails') AS elem
WHERE elem->>'id' = 123;
tbl
étant le nom de votre table, json_col
étant le nom de la colonne JSON.
Plus de détails dans cette réponse connexe :
- Comment interroger à l'aide de champs dans le nouveau type de données JSON PostgreSQL ?
En savoir plus sur le CROSS JOIN LATERAL
implicite dans le dernier paragraphe de cette réponse connexe :
- PostgreSQL unnest() avec le numéro d'élément
Index prenant en charge ce type de requête :
- Index pour trouver un élément dans un tableau JSON