PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Wie kann ich in Postgresql überprüfen, ob JSON gültig ist?

Dies ist ein weiteres gutes Beispiel dafür, warum die Wahl des richtigen Datentyps von Anfang an später hilft;)

Es gibt keine eingebaute Funktion, um zu überprüfen, ob ein gegebener Text gültiges JSON ist. Sie können jedoch Ihre eigenen schreiben:

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;

Achtung:Aufgrund der Ausnahmebehandlung wird dies nicht schnell gehen. Wenn Sie das bei vielen ungültigen Werten aufrufen, wird dies Ihre Auswahl massiv verlangsamen.

Jedoch beide '{"products": 1}' und '{"products": [1,2,3]}' sind gültige JSON-Dokumente. Die Tatsache, dass Ersteres ungültig ist, basiert auf Ihrer Anwendungslogik, nicht auf der JSON-Syntax.

Um zu überprüfen, ob Sie eine ähnliche Funktion benötigen würden, die Fehler beim Aufrufen von json_array_length() abfängt

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;