PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Como posso verificar no Postgresql se o JSON é válido?


Este é outro bom exemplo de por que escolher o tipo de dados apropriado desde o início ajuda mais tarde;)

Não há função interna para verificar se um determinado texto é JSON válido. No entanto, você pode escrever o seu próprio:
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;

Cuidado:devido ao tratamento de exceções, isso não será rápido. Se você chamar isso em muitos valores inválidos, isso desacelerará sua seleção massivamente.

No entanto, ambos os '{"products": 1}' e '{"products": [1,2,3]}' são documentos JSON válidos. O fato de o primeiro ser inválido é baseado na lógica do seu aplicativo, não na sintaxe JSON.

Para verificar se você precisaria de uma função semelhante, que intercepta erros ao chamar 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;