sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur kan jag verifiera i Postgresql att JSON är giltigt?

Detta är ytterligare ett bra exempel på varför det hjälper senare att välja rätt datatyp redan från början;)

Det finns ingen inbyggd funktion för att kontrollera om en given text är giltig JSON. Du kan dock skriva din egen:

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;

Varning:på grund av undantagshanteringen kommer detta inte att gå snabbt. Om du kallar det på många ogiltiga värden kommer detta att sakta ner ditt val avsevärt.

Men båda '{"products": 1}' och '{"products": [1,2,3]}' är giltiga JSON-dokument. Det faktum att det förra är ogiltigt är baserat på din applikationslogik, inte på JSON-syntaxen.

För att verifiera att du skulle behöva en liknande funktion, som fångar fel när du anropar 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. Allvarligt fel:Vissa data har redan matats ut, kan inte skicka PDF-fil

  2. Hur man får server OS lokal tid i alla Postgres-versioner

  3. Oracle:Konvertera en IPv4-adress till ett nummer?

  4. skrivbart gemensamt tabelluttryck och flera infogningssatser