Check if a JSON array in PostgreSQL contains a value

Say you have a table named books, with a JSON column, metadata, and within this column, there is an array named tags.

The data in this table might look like this:

titlemetadata
Ready Player One{“tags”: [“sci-fi”, “gaming”]}
Snow Crash{“tags”: [“sci-fi”, “cyberpunk”]}
In Real Life{“tags”: [“graphic novel”, “gaming”]}

Now, say you want to find out all the books that have the tag gaming. You can extract the tags field using the -> operator, and check whether or not it contains gaming using the ? operator.

SELECT title, metadata FROM books WHERE metadata->'tags' ? 'gaming';

which will return:

titlemetadata
Ready Player One{“tags”: [“sci-fi”, “gaming”]}
In Real Life{“tags”: [“graphic novel”, “gaming”]}

source