PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Comment puis-je vérifier dans Postgresql que JSON est valide ?

Ceci est un autre bon exemple de la raison pour laquelle le choix du type de données approprié dès le début aide plus tard ;)

Il n'y a pas de fonction intégrée pour vérifier si un texte donné est un JSON valide. Vous pouvez cependant écrire le vôtre :

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;

Attention :en raison de la gestion des exceptions, cela ne va pas être rapide. Si vous appelez cela sur de nombreuses valeurs non valides, cela ralentira considérablement votre sélection.

Cependant, les deux '{"products": 1}' et '{"products": [1,2,3]}' sont des documents JSON valides. Le fait que le premier n'est pas valide est basé sur la logique de votre application, et non sur la syntaxe JSON.

Pour vérifier que vous auriez besoin d'une fonction similaire, qui intercepte les erreurs lors de l'appel de 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;