PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana mencegah 'sintaks input tidak valid untuk tipe json' di Postgres, ketika catatan berisi campuran json atau string

Jika Anda ingin melewati baris dengan JSON yang tidak valid, Anda harus menguji terlebih dahulu jika teksnya adalah JSON yang valid. Anda dapat melakukannya dengan membuat fungsi yang akan mencoba mengurai nilai, dan menangkap pengecualian untuk nilai JSON yang tidak valid.

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;

Jika sudah, Anda bisa menggunakan is_json berfungsi dalam CASE atau WHERE klausa untuk mempersempit nilai yang valid.

-- 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. Kapan nama kolom atau tabel Postgres membutuhkan tanda kutip dan kapan tidak?

  2. Deklarasikan variabel tipe komposit di PostgreSQL menggunakan %TYPE

  3. Bagaimana Mod() Bekerja di PostgreSQL

  4. postgresql:jalankan perintah SQL menggunakan psql di commandline

  5. Bagaimana membandingkan 2 nilai baris berturut-turut dalam objek hasil menggunakan python