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

MariaDB JSON_SET() Dijelaskan

Di MariaDB, JSON_SET() adalah fungsi bawaan yang memperbarui atau memasukkan data ke dalam dokumen JSON dan mengembalikan hasilnya.

JSON_SET() dapat memperbarui dan menyisipkan data, sedangkan JSON_INSERT() hanya dapat menyisipkan data, dan JSON_REPLACE() hanya dapat memperbarui data.

Sintaks

Sintaksnya seperti ini:

JSON_SET(json_doc, path, val[, path, val] ...)

Dimana:

  • json_doc adalah dokumen JSON.
  • path adalah jalur elemen untuk menyisipkan data atau memperbarui nilainya.
  • val adalah nilai baru.

Contoh

Berikut ini contoh untuk didemonstrasikan.

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

SELECT JSON_SET(@json, '$.type', 'Dog');

Hasil:

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

Dalam hal ini saya memperbarui nilai type anggota Cat ke Dog .

Elemen Array

Untuk memperbarui atau menyisipkan elemen larik, tentukan indeks elemen:

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

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

Hasil:

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

Dalam hal ini, elemen array kedua diperbarui dengan nilai baru. Array berbasis nol, jadi $.scores[1] mengacu pada elemen kedua dalam array.

Sisipkan Data

Contoh sebelumnya memperbarui data yang ada. Berikut ini contoh memasukkan data baru:

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

SELECT JSON_SET(@json, '$.weight', 10);

Hasil:

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

Di sini, kami memasukkan pasangan kunci/nilai baru ("weight": 10 ).

Di bawah ini adalah contoh menambahkan elemen baru ke array:

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

SELECT JSON_SET(@json, '$.scores[3]', 7);

Hasil:

+-----------------------------------------+
| JSON_SET(@json, '$.scores[3]', 7)       |
+-----------------------------------------+
| {"name": "Wag", "scores": [8, 0, 9, 7]} |
+-----------------------------------------+

Contoh array ini juga dapat dilakukan dengan JSON_ARRAY_INSERT() atau JSON_ARRAY_APPEND() .

Beberapa Jalur

Sintaksnya memungkinkan untuk menyetel/memperbarui nilai di beberapa jalur dengan satu panggilan ke JSON_SET() .

Contoh:

SET @json = '
    { 
        "name" : "Scratch", 
        "type" : "Rat"
    }
';

SELECT JSON_SET(@json, '$.type', 'Cat', '$.weight', 10);

Hasil:

+--------------------------------------------------+
| JSON_SET(@json, '$.type', 'Cat', '$.weight', 10) |
+--------------------------------------------------+
| {"name": "Scratch", "type": "Cat", "weight": 10} |
+--------------------------------------------------+

Pada contoh berikutnya kita memasukkan nilai baru ke dalam array, dan memperbarui yang lain:

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

SELECT 
    JSON_SET(
        @json, 
        '$.scores[1]', "a", 
        '$.scores[3]', "b"
    ) AS Result;

Hasil:

+------------------------------+
| Result                       |
+------------------------------+
| {"scores": [0, "a", 2, "b"]} |
+------------------------------+

Argumen Null

Jika json_doc atau salah satu path argumennya adalah null , hasilnya adalah NULL . Tetapi jika value argumennya adalah null , maka nilainya diganti menjadi null .

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

Hasil:

+------+------+-------------+
| a    | b    | c           |
+------+------+-------------+
| NULL | NULL | {"a": null} |
+------+------+-------------+

Dalam contoh berikut, salah satu argumen jalur hilang dari setiap panggilan ke JSON_SET() . Dalam kedua kasus, hasilnya adalah NULL :

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

SELECT 
    JSON_SET(@json, null, 'Bark', '$.type', 'Dog') AS a,
    JSON_SET(@json, '$.name', 'Bark', null, 'Dog') AS b;

Hasil:

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

Jumlah Parameter Salah

Memanggil JSON_SET() tanpa argumen menghasilkan kesalahan:

SELECT JSON_SET();

Hasil:

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

Sama halnya jika tidak cukup argumen yang diberikan:

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

Hasil:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pengantar Penerapan MySQL Menggunakan Peran yang Mungkin

  2. Cara mengkonfigurasi AppArmor untuk sistem berbasis MySQL (Replikasi MySQL/MariaDB + Galera)

  3. Penyeimbangan Beban Basis Data:Pengaturan Terdistribusi vs Terpusat

  4. Kurangi Mikrodetik dari Nilai Datetime di MariaDB

  5. Bagaimana BIN() Bekerja di MariaDB