Usa il ->>
operatore per recuperare il campo json.
Questo dovrebbe funzionare e restituire null
(come in, nessun valore) correttamente per entrambi:
select ('{"id": null}'::json->>'id')::text
select ('{"id": null}'::json->>'id')::integer
Ho fatto un violino che lo dimostra
PS:per ottenere la stringa "null"
, dovresti definire il tuo json come:{"id": "null"}