CREATE FUNCTION valid_json(json_val text) RETURNS boolean LANGUAGE pljs IMMUTABLE STRICT AS $$ try { JSON.parse(json_val); return true; } catch(e) { return false; } $$; SELECT valid_json('{"foo": "bar"}'::TEXT); valid_json ------------ t (1 row) CREATE FUNCTION get_key(key text, json_data json) RETURNS json LANGUAGE pljs IMMUTABLE STRICT AS $$ var val = json_data[key]; var ret = {}; ret[key] = val; return JSON.stringify(ret); $$; CREATE TABLE jsononly ( data json ); COPY jsononly (data) FROM stdin; -- Call twice to test the function cache. SELECT get_key('ok', data) FROM jsononly; get_key ----------------- "{\"ok\":true}" (1 row) SELECT get_key('ok', data) FROM jsononly; get_key ----------------- "{\"ok\":true}" (1 row)