In breve:usa JSONB invece di JSON o trasmetti JSON su JSONB.
Non puoi confrontare i valori json. Puoi invece confrontare i valori del testo:
SELECT *
FROM movie_test
WHERE tags::text = '["dramatic","women","political"]'
Si noti tuttavia che i valori di tipo JSON vengono archiviati come testo in un formato in cui vengono forniti. Pertanto, il risultato del confronto dipende dal fatto che applichi lo stesso formato in modo coerente:
SELECT
'["dramatic" ,"women", "political"]'::json::text =
'["dramatic","women","political"]'::json::text -- yields false!
In Postgres 9.4+ puoi risolvere questo problema usando il tipo JSONB, che è memorizzato in un formato binario scomposto. È possibile confrontare valori di questo tipo:
SELECT
'["dramatic" ,"women", "political"]'::jsonb =
'["dramatic","women","political"]'::jsonb -- yields true
quindi questa query è molto più affidabile:
SELECT *
FROM movie_test
WHERE tags::jsonb = '["dramatic","women","political"]'::jsonb
Ulteriori informazioni sui tipi JSON.