sql >> Databáze >  >> RDS >> PostgreSQL

Jak mohu v Postgresql ověřit, že je JSON platný?

To je další dobrý příklad, proč výběr vhodného datového typu hned od začátku později pomůže;)

Neexistuje žádná vestavěná funkce pro kontrolu, zda je daný text platný JSON. Můžete však napsat svůj vlastní:

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;

Pozor:kvůli zpracování výjimek to nebude rychlé. Pokud to nazvete na mnoha neplatných hodnotách, výrazně to zpomalí váš výběr.

Nicméně oba '{"products": 1}' a '{"products": [1,2,3]}' jsou platné dokumenty JSON. Skutečnost, že první je neplatná, je založena na logice vaší aplikace, nikoli na syntaxi JSON.

Chcete-li ověřit, že byste potřebovali podobnou funkci, která zachytí chyby při volání 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;



  1. Horních n procent horních n %

  2. Najděte možné duplikáty ve dvou sloupcích bez ohledu na velká a malá písmena a speciální znaky

  3. Kompatibilita HSQLDB ROWNUM s Oracle

  4. VYBERTE několik záznamů pro každý DISTINCT jeden v jediném dotazu