sql >> Database >  >> RDS >> PostgreSQL

Hoe kan ik in Postgresql verifiëren dat JSON geldig is?

Dit is weer een goed voorbeeld waarom het kiezen van het juiste gegevenstype vanaf het begin helpt;)

Er is geen ingebouwde functie om te controleren of een bepaalde tekst een geldige JSON is. U kunt echter uw eigen schrijven:

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;

Let op:door de exception handling gaat dit niet snel. Als je dat op veel ongeldige waarden noemt, zal dit je selectie enorm vertragen.

Echter beide '{"products": 1}' en '{"products": [1,2,3]}' zijn geldige JSON-documenten. Het feit dat de eerste ongeldig is, is gebaseerd op uw toepassingslogica, niet op de JSON-syntaxis.

Om te verifiëren dat je een vergelijkbare functie nodig hebt, die fouten opspoort bij het aanroepen van 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. MySQL rij invoegen op dubbele sleutel update meerdere kolommen

  2. Inleiding tot tijdelijke tabellen in SQL Server

  3. InnoDB MYSQL niet ondersteund op webserver

  4. Hoe sluit ik in SQL het resultaat uit van SELECT * FROM ...?