2015-01-28 18 views
6

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.

Trả lời

3

Bạn có thể sử dụng json_to_record:

select foo 
from json_to_record('{"foo": true}') as x(foo bool); 

Tôi không chắc chắn nếu điều đó thực sự giúp bạn tiết kiệm bất kỳ phôi nội bộ, nhưng đó là điều gần gũi nhất tôi biết trong 9,4

Các vấn đề liên quan