Tôi đang cố gắng kiểm tra json
kiểu trong PostgreSQL 9.3.
Tôi có một json
cột được gọi data
trong một bảng được gọi là reports
. JSON trông giống như sau:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
Tôi muốn truy vấn bảng cho tất cả các báo cáo khớp với giá trị 'src' trong mảng 'đối tượng'. Ví dụ: có thể truy vấn DB cho tất cả các báo cáo phù hợp 'src' = 'foo.png'
không? Tôi đã viết thành công một truy vấn có thể khớp với "background"
:
SELECT data AS data FROM reports where data->>'background' = 'background.png'
Nhưng vì "objects"
có một mảng giá trị, tôi dường như không thể viết một cái gì đó hoạt động. Có thể truy vấn DB cho tất cả các báo cáo phù hợp 'src' = 'foo.png'
không? Tôi đã xem qua các nguồn này nhưng vẫn không thể lấy được:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- Làm cách nào để truy vấn bằng các trường bên trong kiểu dữ liệu PostgreSQL JSON mới?
- http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/
Tôi cũng đã thử những thứ như thế này nhưng vô ích:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
Tôi không phải là chuyên gia SQL, vì vậy tôi không biết mình đang làm gì sai.
jsonb
/ pg 9.4. Ngoài ra: đối với trường hợp đơn giản (1 mức lồng nhau),->
toán tử cũng thực hiện thủ thuậtjson
trong trang 9.3.