How can I verify in Postgresql that JSON is valid? -
i've got big database analytics data written in json.
i want filter out rows incorrect data:
- invalid json (some rows has that:
'{"hello": "world'
- some attributes not array take
'{"products": [1,2,3]}'
, leave out'{"products": 1}'
i want that:
select * analytics (is_correct_json(json::json)) , (is_array(json::json->>'products'))
how can achieve that?
this example why choosing appropriate data type right start helps later ;)
there no built-in function check if given text valid json. can write own:
create or replace function is_valid_json(p_json text) returns boolean $$ begin return (p_json::json not null); exception when others return false; end; $$ language plpgsql immutable;
caution: due exception handling not going fast. if call on many invalid values going slow down select massively.
however both '{"products": 1}'
, '{"products": [1,2,3]}'
valid json documents. fact former invalid based on application logic, not on json syntax.
to verify need similar function, traps errors when calling json_array_length()
create or replace function is_valid_json_array(p_json text, p_element text) returns boolean $$ begin return json_array_length( p_json::json -> p_element) >= 0; exception when others return false; end; $$ language plpgsql immutable;
Comments
Post a Comment