Postgres SELECT rows where JSON array contains "most" of values
You can use exists combined with json_array_elements

select id from items where exists 
    (select 1 from json_array_elements(labels-&gt;'labels') f(x) 
        where x-&gt;&gt;'value' in ('peach', 'fruit', 'orange') 
        having count(*)&gt;=2
    );


It gives the answer you want, but good luck making it fast if the table is large.  (Changing from JSON to JSONB might speed it up slightly)