PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Jak zapobiec „nieprawidłowej składni wejściowej dla typu json” w Postgresie, gdy rekordy zawierają mieszankę json lub ciągów

Jeśli chcesz pominąć wiersze z nieprawidłowym kodem JSON, musisz najpierw przetestować czy tekst jest poprawnym JSON. Możesz to zrobić, tworząc funkcję, która spróbuje przeanalizować wartość i złapać wyjątek dla nieprawidłowych wartości JSON.

CREATE OR REPLACE FUNCTION is_json(input_text varchar) RETURNS boolean AS $$
  DECLARE
    maybe_json json;
  BEGIN
    BEGIN
      maybe_json := input_text;
    EXCEPTION WHEN others THEN
      RETURN FALSE;
    END;

    RETURN TRUE;
  END;
$$ LANGUAGE plpgsql IMMUTABLE;

Kiedy już to masz, możesz użyć is_json funkcja w CASE lub WHERE klauzula, aby zawęzić prawidłowe wartości.

-- this can eliminate invalid values
SELECT user_data::json #> '{user,name}'
FROM users WHERE is_json(user_data);

-- or this if you want to fill will NULLs
SELECT
  CASE
    WHEN is_json(user_data)
      THEN user_data::json #> '{user,name}'
    ELSE
      NULL
  END
FROM users;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Warunki wyścigu między SELECT i INSERT dla wielu kolumn

  2. Jak mogę scalić rekordy w dwóch tablicach JSON?

  3. Co oznacza hashed subplan w PostgreSQL?

  4. 4 sposoby na znalezienie wierszy zawierających wielkie litery w PostgreSQL

  5. PostgreSQL:BŁĄD:42601:lista definicji kolumn jest wymagana dla funkcji zwracających rekord