Dette er endnu et godt eksempel på, hvorfor det hjælper senere at vælge den passende datatype lige fra starten;)
Der er ingen indbygget funktion til at kontrollere, om en given tekst er gyldig JSON. Du kan dog skrive 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;
Forsigtig:På grund af undtagelseshåndteringen vil dette ikke være hurtigt. Hvis du kalder det på mange ugyldige værdier, vil dette bremse dit valg enormt.
Men begge '{"products": 1}'
og '{"products": [1,2,3]}'
er gyldige JSON-dokumenter. Det faktum, at førstnævnte er ugyldig, er baseret på din applikationslogik, ikke på JSON-syntaksen.
For at bekræfte, at du har brug for en lignende funktion, som fanger fejl, når du kalder 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;