To je další dobrý příklad, proč výběr vhodného datového typu hned od začátku později pomůže;)
Neexistuje žádná vestavěná funkce pro kontrolu, zda je daný text platný JSON. Můžete však napsat svůj vlastní:
create or replace function is_valid_json(p_json text)
returns boolean
as
$$
begin
return (p_json::json is not null);
exception
when others then
return false;
end;
$$
language plpgsql
immutable;
Pozor:kvůli zpracování výjimek to nebude rychlé. Pokud to nazvete na mnoha neplatných hodnotách, výrazně to zpomalí váš výběr.
Nicméně oba '{"products": 1}'
a '{"products": [1,2,3]}'
jsou platné dokumenty JSON. Skutečnost, že první je neplatná, je založena na logice vaší aplikace, nikoli na syntaxi JSON.
Chcete-li ověřit, že byste potřebovali podobnou funkci, která zachytí chyby při volání json_array_length()
create or replace function is_valid_json_array(p_json text, p_element text)
returns boolean
as
$$
begin
return json_array_length( p_json::json -> p_element) >= 0;
exception
when others then
return false;
end;
$$
language plpgsql
immutable;