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

MariaDB JSON_REMOVE() Dijelaskan

Di MariaDB, JSON_REMOVE() adalah fungsi bawaan yang menghapus data dari dokumen JSON dan mengembalikan hasilnya.

Sintaks

Sintaksnya seperti ini:

JSON_REMOVE(json_doc, path[, path] ...)

Contoh

Berikut ini contoh untuk didemonstrasikan.

SET @json = '{ "name" : "Wag", "type" : "Dog" }';

SELECT JSON_REMOVE(@json, '$.type');

Hasil:

+------------------------------+
| JSON_REMOVE(@json, '$.type') |
+------------------------------+
| {"name": "Wag"}              |
+------------------------------+

Dalam hal ini kami menghapus anggota data type dari dokumen. Dengan kata lain, type kunci dan nilai terkaitnya telah dihapus.

Array

JSON_REMOVE() dapat digunakan untuk menghapus seluruh array, atau elemen tertentu di dalam array.

Untuk menghapus seluruh array, cukup gunakan nama kunci:

SET @json = '{ "name" : "Wag", "scores" : [8, 7, 9] }';

SELECT JSON_REMOVE(@json, '$.scores');

Hasil:

+--------------------------------+
| JSON_REMOVE(@json, '$.scores') |
+--------------------------------+
| {"name": "Wag"}                |
+--------------------------------+

Itu menghapus seluruh array dari dokumen.

Untuk menghapus elemen array, tentukan indeks elemen. Berikut ini contoh menghapus elemen array dari array:

SET @json = '{ "name" : "Wag", "scores" : [8, 7, 9] }';

SELECT JSON_REMOVE(@json, '$.scores[1]');

Hasil:

+-----------------------------------+
| JSON_REMOVE(@json, '$.scores[1]') |
+-----------------------------------+
| {"name": "Wag", "scores": [8, 9]} |
+-----------------------------------+

Dalam hal ini, elemen array kedua telah dihapus. Array berbasis nol, jadi $.scores[1] mengacu pada elemen kedua dalam array.

Lihat di bawah untuk mengetahui cara JSON_REMOVE() berurusan dengan menghapus beberapa jalur dalam array.

Beberapa Jalur

Saat menyediakan beberapa jalur, jalur tersebut dievaluasi dari kiri ke kanan. Artinya, hasil evaluasi sebelumnya digunakan sebagai nilai untuk evaluasi selanjutnya.

Sebaiknya perhatikan hal ini saat menghapus elemen dari array berdasarkan indeksnya.

Pertama, berikut adalah contoh yang menghapus beberapa jalur dari dokumen, berdasarkan kuncinya:

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Dog",
        "weight" : 10
    }
';

SELECT JSON_REMOVE(@json, '$.type', '$.weight');

Hasil:

+------------------------------------------+
| JSON_REMOVE(@json, '$.type', '$.weight') |
+------------------------------------------+
| {"name": "Wag"}                          |
+------------------------------------------+

Setiap pasangan kunci/nilai telah dihapus seperti yang diharapkan.

Dalam contoh berikutnya kami tidak menghapus pasangan kunci/nilai. Sebagai gantinya, kami menghapus beberapa elemen dari larik:

SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';

SELECT 
    JSON_REMOVE(@json, '$.scores[2]', '$.scores[4]') AS a,
    JSON_REMOVE(@json, '$.scores[4]', '$.scores[2]') AS b;

Hasil:

+--------------------------+--------------------------+
| a                        | b                        |
+--------------------------+--------------------------+
| {"scores": [0, 1, 3, 4]} | {"scores": [0, 1, 3, 5]} |
+--------------------------+--------------------------+

Dalam hal ini kami memanggil JSON_REMOVE() dua kali. Keduanya menentukan indeks array yang sama untuk dihapus (2 dan 4 ), tapi kami menukar argumen di panggilan kedua. Pada contoh pertama, ini menjadi 2 lalu 4 (dalam urutan itu). Pada contoh kedua, 4 lalu 2 .

Ini menghasilkan hasil yang berbeda untuk setiap panggilan. Seperti yang disebutkan, beberapa jalur dievaluasi dari kiri ke kanan, sehingga urutannya dapat memengaruhi hasil.

Berikut adalah contoh lain yang menggambarkan bagaimana hasilnya bisa sangat berbeda, tergantung pada berapa banyak jalur yang ditentukan, jalur mana, dan urutannya:

SET @json = '{ "scores" : [ 0, 1, 2, 3, 4, 5 ] }';

SELECT 
    JSON_REMOVE(@json, '$.scores[0]', '$.scores[1]', '$.scores[5]') AS a,
    JSON_REMOVE(@json, '$.scores[1]', '$.scores[5]', '$.scores[0]') AS b,
    JSON_REMOVE(@json, '$.scores[5]', '$.scores[0]', '$.scores[1]') AS c,
    JSON_REMOVE(@json, '$.scores[5]', '$.scores[1]', '$.scores[0]') AS d,
    JSON_REMOVE(@json, '$.scores[1]', '$.scores[0]', '$.scores[5]') AS e,
    JSON_REMOVE(@json, '$.scores[0]', '$.scores[5]', '$.scores[1]') AS f;

Hasil (menggunakan keluaran vertikal):

a: {"scores": [1, 3, 4, 5]}
b: {"scores": [2, 3, 4, 5]}
c: {"scores": [1, 3, 4]}
d: {"scores": [2, 3, 4]}
e: {"scores": [2, 3, 4, 5]}
f: {"scores": [1, 3, 4, 5]}

Argumen Null

Jika ada argumen NULL , hasilnya adalah NULL :

SELECT 
    JSON_REMOVE(null, '$.a') AS a,
    JSON_REMOVE('{"a":1}', null) AS b,
    JSON_REMOVE(null, null) AS c;

Hasil:

+------+------+------+
| a    | b    | c    |
+------+------+------+
| NULL | NULL | NULL |
+------+------+------+

Jumlah Parameter Salah

Memanggil JSON_REMOVE() tanpa argumen menghasilkan kesalahan:

SELECT JSON_REMOVE();

Hasil:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REMOVE'

Sama halnya jika tidak cukup argumen yang diberikan:

SELECT JSON_REMOVE('{"a":1}');

Hasil:

ERROR 1582 (42000): Incorrect parameter count in the call to native function 'JSON_REMOVE'

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

  2. Bagaimana YEAR() Bekerja di MariaDB

  3. Bagaimana ADDDATE() Bekerja di MariaDB

  4. Cara Menghasilkan Integer Acak Dalam Rentang di MariaDB

  5. Bagaimana COALESCE() Bekerja di MariaDB