Cách tốt nhất để chuyển đổi trường boolean từ đối tượng JSONB thành kiểu bool bình thường trong Postgres là gì?Làm cách nào để chuyển đổi giá trị JSONB thành boolean trong Postgresql?
Ví dụ: tôi có đối tượng JSON {"foo": true}
, mà tôi có thể sử dụng trong Postgresql. Ví dụ: select ('{"foo": true}'::jsonb);
mang đến cho tôi một số loại JSONB.
Bây giờ tôi muốn trích xuất trường foo
dưới dạng boolean. Nếu tôi làm:
select ('{"foo": true}'::jsonb)->'foo';
Tôi lấy lại thứ gì đó loại JSONB.
Nhưng, tôi không thể truyền JSONB thành boolean. Nếu thay vì tôi làm:
select ('{"foo": true}'::jsonb)->>'foo';
tôi sẽ liên lạc lại một cái gì đó kiểu string. Từ đó tôi có thể chuyển đổi thành boolean. (Ví dụ :)
select (('{"foo": true}'::jsonb)->>'foo')::bool;
Nhưng điều đó có vẻ hơi icky đi từ đại diện nội bộ để chuỗi, và sau đó trở lại một đại diện nội bộ.
Có cách nào để chuyển trực tiếp đến một bool không?
công việc tốt nhất hiện hành khác của tôi xung quanh có vẻ là:
select (('{"foo": true}'::jsonb)->'foo') = 'true'::jsonb;
nhưng điều đó cũng có vẻ hơi sai.