Puoi usare json_array_elements
funzione per generare un SETOF json
da un array:
SELECT name, json_array_elements(data) AS author
FROM publisher
Avendolo, puoi usarlo come sottoquery, così puoi filtrare ciò che vuoi, ad esempio:
SELECT DISTINCT author->>'author'
FROM (
SELECT name, json_array_elements(data) AS author
FROM publisher
) t
WHERE t.author->>'type' = 'Novel';
Nota solo che se hai molte righe in questa tabella, le prestazioni di tali query (almeno per la versione corrente, 9.3) saranno davvero pessime. Ti consiglio di normalizzare i dati in tabelle.