Използвайте ->> оператор за извличане на json полето.
Това трябва да работи и да върне null (както в, без стойност) правилно и за двете:
select ('{"id": null}'::json->>'id')::text
select ('{"id": null}'::json->>'id')::integer
Аз направих цигулка което го демонстрира
PS:за получаване на низ "null" , ще трябва да дефинирате своя json като:{"id": "null"}