Saya mencoba menguji json
tipe di PostgreSQL 9.3.
Saya memiliki json
kolom yang disebut data
dalam tabel bernama reports
. JSON terlihat seperti ini:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
Saya ingin meminta tabel untuk semua laporan yang cocok dengan nilai 'src' dalam larik 'objek'. Misalnya, apakah mungkin untuk menanyakan DB untuk semua laporan yang cocok 'src' = 'foo.png'
? Saya berhasil menulis kueri yang cocok dengan "background"
:
SELECT data AS data FROM reports where data->>'background' = 'background.png'
Tetapi karena "objects"
memiliki larik nilai, sepertinya saya tidak dapat menulis sesuatu yang berfungsi. Apakah mungkin untuk menanyakan DB untuk semua laporan yang cocok 'src' = 'foo.png'
? Saya telah memeriksa sumber-sumber ini tetapi masih belum bisa mendapatkannya:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- Bagaimana cara membuat kueri menggunakan kolom di dalam tipe data PostgreSQL JSON yang baru?
- http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/
Saya juga sudah mencoba hal-hal seperti ini tetapi tidak berhasil:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
Saya bukan ahli SQL, jadi saya tidak tahu apa yang saya lakukan salah.
jsonb
/ hal 9.4. Selain: untuk kasus sederhana (1 level bersarang),->
operator juga melakukan trik untukjson
di halaman 9.3.Buat tabel dengan kolom tipe json
Sekarang mari kita masukkan data json
Sekarang mari membuat beberapa kueri untuk mengambil data
Anda mungkin telah memperhatikan bahwa hasilnya muncul dengan koma terbalik (") dan tanda kurung ([])
Sekarang untuk mengambil hanya nilai-nilai saja gunakan
->>
sumber
pilih data -> 'objek' -> 0 -> 'src' sebagai SRC dari tabel tempat data -> 'objek' -> 0 -> 'src' = 'foo.png'
sumber