Dit is weer een goed voorbeeld waarom het kiezen van het juiste gegevenstype vanaf het begin helpt;)
Er is geen ingebouwde functie om te controleren of een bepaalde tekst een geldige JSON is. U kunt echter uw eigen schrijven:
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;
Let op:door de exception handling gaat dit niet snel. Als je dat op veel ongeldige waarden noemt, zal dit je selectie enorm vertragen.
Echter beide '{"products": 1}'
en '{"products": [1,2,3]}'
zijn geldige JSON-documenten. Het feit dat de eerste ongeldig is, is gebaseerd op uw toepassingslogica, niet op de JSON-syntaxis.
Om te verifiëren dat je een vergelijkbare functie nodig hebt, die fouten opspoort bij het aanroepen van 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;