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;