PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Come posso verificare in Postgresql che JSON sia valido?

Questo è un altro buon esempio del motivo per cui scegliere il tipo di dati appropriato fin dall'inizio aiuta in seguito;)

Non esiste una funzione integrata per verificare se un determinato testo è JSON valido. Puoi comunque scrivere il tuo:

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;

Attenzione:a causa della gestione delle eccezioni, questo non sarà veloce. Se lo richiedi su molti valori non validi, questo rallenterà notevolmente la tua selezione.

Comunque sia '{"products": 1}' e '{"products": [1,2,3]}' sono documenti JSON validi. Il fatto che il primo non sia valido si basa sulla logica dell'applicazione, non sulla sintassi JSON.

Per verificare che avresti bisogno di una funzione simile, che intrappola gli errori quando si chiama 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;