Detta är ytterligare ett bra exempel på varför det hjälper senare att välja rätt datatyp redan från början;)
Det finns ingen inbyggd funktion för att kontrollera om en given text är giltig JSON. Du kan dock skriva din egen:
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;
Varning:på grund av undantagshanteringen kommer detta inte att gå snabbt. Om du kallar det på många ogiltiga värden kommer detta att sakta ner ditt val avsevärt.
Men båda '{"products": 1}'
och '{"products": [1,2,3]}'
är giltiga JSON-dokument. Det faktum att det förra är ogiltigt är baserat på din applikationslogik, inte på JSON-syntaxen.
För att verifiera att du skulle behöva en liknande funktion, som fångar fel när du anropar 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;