Đây là một ví dụ điển hình khác tại sao việc chọn kiểu dữ liệu thích hợp ngay từ đầu sẽ giúp ích cho sau này;)
Không có chức năng tích hợp nào để kiểm tra xem một văn bản nhất định có phải là JSON hợp lệ hay không. Tuy nhiên, bạn có thể viết của riêng bạn:
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;
Thận trọng:do xử lý ngoại lệ, việc này sẽ không nhanh. Nếu bạn gọi như vậy trên nhiều giá trị không hợp lệ, điều này sẽ làm chậm quá trình lựa chọn của bạn một cách ồ ạt.
Tuy nhiên, cả '{"products": 1}'
và '{"products": [1,2,3]}'
là các tài liệu JSON hợp lệ. Thực tế là cái trước là không hợp lệ dựa trên logic ứng dụng của bạn, không phải trên cú pháp JSON.
Để xác minh rằng bạn sẽ cần một hàm tương tự, hàm đó sẽ mắc lỗi khi gọi 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;