sql >> Base de Datos >  >> RDS >> PostgreSQL

¿Cómo puedo verificar en Postgresql que JSON es válido?

Este es otro buen ejemplo de por qué elegir el tipo de datos adecuado desde el principio ayuda más adelante;)

No hay una función integrada para verificar si un texto dado es JSON válido. Sin embargo, puede escribir el suyo propio:

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;

Precaución:debido al manejo de excepciones, esto no será rápido. Si llama a eso en muchos valores no válidos, esto ralentizará enormemente su selección.

Sin embargo, ambos '{"products": 1}' y '{"products": [1,2,3]}' son documentos JSON válidos. El hecho de que el primero no sea válido se basa en la lógica de su aplicación, no en la sintaxis JSON.

Para verificar que necesitaría una función similar, que atrapa errores al llamar a 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;