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

MariaDB JSON_SEARCH() Dijelaskan

Di MariaDB, JSON_SEARCH() adalah fungsi bawaan yang memungkinkan Anda mendapatkan jalur ke nilai tertentu dalam dokumen JSON.

Ia menerima dokumen JSON dan string sebagai argumen, dan mengembalikan jalur ke string yang diberikan di dalam dokumen.

Sintaks

Sintaksnya seperti ini:

JSON_SEARCH(
    json_doc, 
    return_arg, 
    search_str[, escape_char[, path] ...]
    ) 

Dimana:

  • json_doc adalah dokumen JSON dan search_str adalah string.
  • return_arg adalah kata kunci one atau all . Jika Anda menggunakan one , hanya jalur pertama yang dikembalikan. Kejadian lain diabaikan. Jalur mana yang dianggap "pertama" tidak ditentukan (menurut dokumentasi MariaDB). Jika all ditentukan, jalur semua kejadian dikembalikan. Jika ada beberapa jalur, jalur tersebut akan dibungkus otomatis sebagai larik.
  • escape_char argumen adalah karakter opsional untuk digunakan sebagai karakter pelarian.
  • path argumen adalah argumen opsional untuk menentukan di mana jalur "tingkat atas" dimulai dalam dokumen JSON.

Contoh

Berikut ini contoh untuk didemonstrasikan:

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

SELECT JSON_SEARCH(@json, 'one', 'Wag'); 

Hasil:

+----------------------------------+| JSON_SEARCH(@json, 'one', 'Wag') |+----------------------------------+ | "$.name" |+----------------------------------+

Berikut ini contoh mengembalikan jalur untuk elemen dalam array:

SET @json = '
    { 
        "product" : "Left Handed Screwdriver", 
        "sizes" : [ "Small", "Medium", "Large" ],
    }';

SELECT JSON_SEARCH(@json, 'one', 'Medium'); 

Hasil:

+-------------------------------------+| JSON_SEARCH(@json, 'satu', "Sedang") |+----------------------------------- --+| "$.sizes[1]" |+-------------------------------------+ 

Array berbasis nol, jadi $.sizes[1] mengacu pada elemen kedua dalam array.

Beberapa Kejadian

Jika Anda ingin mengembalikan semua jalur yang berisi string, gunakan all bukannya one untuk argumen kedua.

SET @json = '[
    { "name": "Wag", "type": "Dog", "weight": 20 },
    { "name": "Bark", "type": "Dog", "weight": 10 },
    { "name": "Meow", "type": "Cat", "weight": 7 }
]';

SELECT JSON_SEARCH(@json, 'all', 'Dog'); 

Hasil:

+----------------------------------+| JSON_SEARCH(@json, 'semua', "Anjing") |+----------------------------------+ | ["$[0].type", "$[1].type"] |+----------------------------- -----+

Jika kita mengubah all ke one , inilah yang terjadi:

SET @json = '[
    { "name": "Wag", "type": "Dog", "weight": 20 },
    { "name": "Bark", "type": "Dog", "weight": 10 },
    { "name": "Meow", "type": "Cat", "weight": 7 }
]';

SELECT JSON_SEARCH(@json, 'one', 'Dog'); 

Hasil:

+----------------------------------+| JSON_SEARCH(@json, 'satu', "Anjing") |+----------------------------------+ | "$[0].type" |+----------------------------------+

Hanya satu jalur yang dikembalikan.

Tentukan Jalur

Berikut adalah contoh yang menentukan jalur yang akan ditelusuri dalam dokumen:

SET @json = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "NZ Dog Award" : "Top Dog", 
                "New York Marathon" : "Fastest Animal", 
                "Sumo 2021" : "Biggest Dog"
            }
        }
    }
';
SELECT JSON_SEARCH(
    @json, 
    'all',
    '%dog%',
    NULL,
    '$.details.awards'
    ) AS Result; 

Hasil:

+------------------------------------------------- -------------------+| Hasil |+----------------------------------------------- ------------------+| ["$.details.awards.NZ Dog Award", "$.details.awards.Sumo 2021"] |+------------------------ -----------------------------------------+

Dalam hal ini, string dog sebenarnya terjadi tiga kali dalam dokumen, tetapi hanya dua kali di bawah jalur yang ditentukan.

Juga, kami menggunakan NULL untuk argumen karakter escape, yang menghasilkan karakter escape default yang digunakan, yaitu garis miring terbalik (\ ).

Karakter Escape Default

Secara default, karakter escape adalah garis miring terbalik (\ ).

Contoh:

SET @json = '[
    { "uid": "Wag", "pwd": "my%pwd" },
    { "uid": "Bark", "pwd": "my%%%pwd" },
    { "uid": "Bark", "pwd": "myBIGpwd" }
]';

SELECT 
    JSON_SEARCH(@json, 'all', 'my%pwd') AS "Not Escaped",
    JSON_SEARCH(@json, 'all', 'my\%pwd') AS "Escaped"; 

Hasil:

+--------------------------------------+------- -----+| Tidak Lolos | Kabur |+----------------------------------+-------- ----+| ["$[0].pwd", "$[1].pwd", "$[2].pwd"] | "$[0].pwd" |+---------------------------------------+- -----------+

Tanda persentase (% ) adalah karakter wildcard yang cocok dengan sejumlah karakter. Oleh karena itu, jika kita tidak menghindarinya, maka akan cocok dengan sejumlah karakter, termasuk karakter yang bukan tanda persentase.

Tetapi ketika kita lolos dari tanda persentase dengan karakter melarikan diri, itu hanya akan cocok ketika ada tepat satu tanda persentase di lokasi itu.

Hasil di atas mencerminkan hal ini.

Tentukan Karakter Escape Kustom

Anda dapat menentukan karakter escape khusus jika diperlukan. Untuk melakukan ini, berikan sebagai argumen keempat.

Contoh:

SET @json = '[
    { "uid": "Wag", "pwd": "my%pwd" },
    { "uid": "Bark", "pwd": "my%%%pwd" },
    { "uid": "Bark", "pwd": "myBIGpwd" }
]';

SELECT 
    JSON_SEARCH(@json, 'all', 'my%pwd', '!') AS "Not Escaped",
    JSON_SEARCH(@json, 'all', 'my!%pwd', '!') AS "Escaped"; 

Hasil:

+--------------------------------------+------- -----+| Tidak Lolos | Kabur |+----------------------------------+-------- ----+| ["$[0].pwd", "$[1].pwd", "$[2].pwd"] | "$[0].pwd" |+---------------------------------------+- -----------+

Jadi kita mendapatkan hasil yang sama seperti pada contoh sebelumnya. Satu-satunya perbedaan adalah bahwa kami menentukan karakter pelarian yang berbeda. Dalam hal ini, kami menetapkan bahwa tanda seru (! ) adalah karakter pelarian.

Argumen Null

Jika salah satu string pencarian, string pencarian, atau argumen jalur adalah NULL , hasilnya adalah NULL :

SELECT 
    JSON_SEARCH(null, 'all', 's', '', '$') AS a,
    JSON_SEARCH('{"a":1}', 'all', null, '', '$') AS b,
    JSON_SEARCH('{"a":1}', 'all', 's', '', null) AS c; 

Hasil:

+------+------+------+| sebuah | b | c |+------+------+------+| NULL | NULL | NULL |+------+------+------+

Jumlah Parameter Salah

Tidak memberikan argumen akan menyebabkan kesalahan:

SELECT JSON_SEARCH(); 

Hasil:

ERROR 1582 (42000):Jumlah parameter salah dalam panggilan ke fungsi asli 'JSON_SEARCH'

Sama halnya jika Anda memberikan argumen yang terlalu sedikit:

SELECT JSON_SEARCH('{"a":1}', 'all'); 

Hasil:

ERROR 1582 (42000):Jumlah parameter salah dalam panggilan ke fungsi asli 'JSON_SEARCH'

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB Server 10.0.33 sekarang tersedia

  2. Menggabungkan Kekuatan SQL dan Pernyataan Prosedural dengan Mode Kompatibilitas Oracle MariaDB

  3. 3 Cara Mendapatkan Kumpulan Server di MariaDB

  4. Otomasi Basis Data dengan Wayang:Menerapkan MySQL &MariaDB Galera Cluster

  5. Pengantar Pencarian Teks Lengkap di MariaDB