MariaDB
 sql >> Teknologi Basis Data >  >> RDS >> MariaDB

Cara Mengembalikan Elemen dari JSON Array di MariaDB

MariaDB menyertakan dua pemilih yang memungkinkan kita memilih elemen dari array JSON:

  • [N] memilih nomor elemen N dalam larik (misalnya, [0] untuk memilih elemen pertama).
  • [*] memilih semua elemen dalam larik.

Ini dapat digunakan di sejumlah fungsi JSON yang disertakan dalam MariaDB. Contoh berikut menggunakannya dengan JSON_EXTRACT() fungsi untuk mengembalikan elemen array yang dipilih.

Contoh – [N]

Berikut adalah contoh sederhana untuk mendemonstrasikan cara memilih elemen array tunggal:

SELECT JSON_EXTRACT('[1,2,3]', '$[1]');

Hasil:

+---------------------------------+
| JSON_EXTRACT('[1,2,3]', '$[1]') |
+---------------------------------+
| 2                               |
+---------------------------------+

Array berbasis nol, jadi $[1] memilih elemen larik kedua.

Berikut contoh lain, kali ini menggunakan dokumen JSON yang sedikit lebih besar:

SET @json = '
    { 
        "_id": 1, 
        "product": "Left Handed Screwdriver", 
        "sizes": [ "S", "M", "L" ] 
    }
';

SELECT JSON_EXTRACT(@json, '$.sizes[1]');

Hasil:

+-----------------------------------+
| JSON_EXTRACT(@json, '$.sizes[1]') |
+-----------------------------------+
| "M"                               |
+-----------------------------------+

Dalam hal ini, .sizes menentukan sizes anggota objek, dan juga $.sizes[1] memilih item kedua dalam sizes larik.

Contoh- [*]

[*] pemilih memilih semua elemen dalam array.

Contoh:

SET @json = '
    { 
        "_id": 1, 
        "product": "Left Handed Screwdriver", 
        "sizes": [ "S", "M", "L" ] 
    }
';

SELECT JSON_EXTRACT(@json, '$.sizes[*]');

Hasil:

+-----------------------------------+
| JSON_EXTRACT(@json, '$.sizes[*]') |
+-----------------------------------+
| ["S", "M", "L"]                   |
+-----------------------------------+

Dalam hal ini, hasilnya terlihat persis sama dengan larik aslinya, dalam hal ini, itu bisa saja dikembalikan hanya dengan menentukan $.sizes .

Beberapa Pemilih Array

Tapi inilah contoh lain yang menggunakan dua pemilih array.

Pertama, kami menggunakan pemilih wildcard untuk memilih semua elemen dalam array. Kemudian kita menggunakan pemilih array lain untuk memilih hanya elemen kedua dalam array yang bersarang di dalam elemen tersebut:

SET @json = '
{ 
    "products" : 
    [
        { 
            "_id": 1, 
            "product": "Left Handed Screwdriver", 
            "sizes": [ "S", "M", "L" ] 
        },
        { 
            "_id": 2, 
            "product": "Long Weight", 
            "sizes": [ 8, 7, 10 ] 
        },
        { 
            "_id": 3, 
            "product": "Bottomless Coffee Cup", 
            "sizes": [ "Tall", "Grande", "Venti" ] 
        }
    ]
}
';

SELECT JSON_EXTRACT(@json, '$.products[*].sizes[1]');

Hasil:

+-----------------------------------------------+
| JSON_EXTRACT(@json, '$.products[*].sizes[1]') |
+-----------------------------------------------+
| ["M", 7, "Grande"]                            |
+-----------------------------------------------+

Langkah Wildcard

Jika dokumen JSON Anda berisi beberapa larik dengan nama yang sama, beberapa bersarang di tingkat yang berbeda atau di objeknya sendiri, Anda dapat memilih semuanya dengan bantuan langkah wildcard (** ). Langkah wildcard secara rekursif memilih semua elemen anak dari elemen saat ini.

Di sini, kami menggunakannya untuk membantu membangun ekspresi JSONPath yang mengembalikan elemen array kedua dari semua array yang disebut sizes , termasuk larik yang bersarang di dalam dokumen lain:

SET @json = '[
    { 
        "_id": 1, 
        "product": { 
            "name" : "Tuxedo", 
            "color" : "Blue",
            "sizes": [ "S", "M", "L" ],
            "accessories" : {
                "belt" : {
                    "color" : "Navy",
                    "sizes" : [ "Wide", "Narrow" ]
                },
                "tie" : {
                    "color" : "Black",
                    "sizes" : [ "Short", "Medium", "Long" ]
                }
            }
        }
    }
]';

SELECT JSON_EXTRACT(@json, '$**.sizes[1]');

Hasil:

+-------------------------------------+
| JSON_EXTRACT(@json, '$**.sizes[1]') |
+-------------------------------------+
| ["M", "Narrow", "Medium"]           |
+-------------------------------------+

  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 CONVERT() Bekerja di MariaDB

  2. MariaDB CEIL() Dijelaskan

  3. MariaDB 10.6 dan NextCloud:COMPRESSED Row secara default hanya-baca

  4. Bagaimana MID() Bekerja di MariaDB

  5. Bagaimana CEILING() Bekerja di MariaDB