Ini adalah contoh bagus lainnya mengapa memilih tipe data yang sesuai sejak awal membantu nanti;)
Tidak ada fungsi bawaan untuk memeriksa apakah teks yang diberikan adalah JSON yang valid. Namun Anda dapat menulis sendiri:
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;
Perhatian:karena penanganan pengecualian ini tidak akan cepat. Jika Anda menyebutnya demikian pada banyak nilai yang tidak valid, ini akan memperlambat pilihan Anda secara besar-besaran.
Namun keduanya '{"products": 1}'
dan '{"products": [1,2,3]}'
adalah dokumen JSON yang valid. Fakta bahwa yang pertama tidak valid didasarkan pada logika aplikasi Anda, bukan pada sintaks JSON.
Untuk memverifikasi bahwa Anda memerlukan fungsi serupa, yang menjebak kesalahan saat memanggil 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;