PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Meminta array objek JSON di Postgres

Anda harus menghancurkan array objek json terlebih dahulu menggunakan fungsi (json_array_elements atau jsonb_array_elements jika Anda memiliki tipe data jsonb ), maka Anda dapat mengakses nilai dengan menentukan kuncinya.

WITH json_test (col) AS (
  values (json '[{"name":"Mickey Mouse","age":10},{"name":"Donald Duck","age":5}]')
)
SELECT
  y.x->'name' "name"
FROM json_test jt, 
LATERAL (SELECT json_array_elements(jt.col) x) y

-- outputs:
name
--------------
"Mickey Mouse"
"Donald Duck"

Untuk mendapatkan hitungan nama unik, ini adalah kueri yang mirip dengan yang di atas, kecuali fungsi agregat hitungan yang berbeda diterapkan ke y.x->>name

WITH json_test (col) AS (
  values (json '[{"name":"Mickey Mouse","age":10},{"name":"Donald Duck","age":5}]')
)
SELECT
  COUNT( DISTINCT y.x->>'name') distinct_names
FROM json_test jt, 
LATERAL (SELECT json_array_elements(jt.col) x) y

Hal ini diperlukan untuk menggunakan ->> bukannya -> seperti sebelumnya (->> ) menampilkan nilai yang diekstraksi sebagai teks, yang mendukung perbandingan kesetaraan (diperlukan untuk penghitungan yang berbeda), sedangkan yang terakhir (-> ) mengekstrak nilai sebagai json, yang tidak mendukung perbandingan kesetaraan.

Atau, konversikan json sebagai jsonb dan gunakan jsonb_array_elements . JSONB mendukung perbandingan kesetaraan, sehingga dimungkinkan untuk menggunakan COUNT DISTINCT bersama dengan ekstraksi melalui -> , yaitu

COUNT(DISTINCT (y.x::jsonb)->'name')


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. bagaimana cara menjalankan skrip pgsql di pgAdmin?

  2. Python psycopg2 cursor.fetchall() mengembalikan daftar kosong tetapi cursor.rowcount> 1

  3. Permintaan asli operator JPA dan JSON

  4. Jangan perbarui kolom jika nilai pembaruan adalah nol

  5. RedShift - Beban CSV dengan Line Break