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

MariaDB JSON_EXTRACT() Dijelaskan

Di MariaDB, JSON_EXTRACT() adalah fungsi bawaan yang mengekstrak data dari dokumen JSON, berdasarkan jalur atau jalur tertentu.

Itu dapat mengembalikan nilai tunggal dan banyak nilai. Jika satu nilai cocok, satu nilai dikembalikan. Jika beberapa nilai cocok, maka nilai tersebut dikembalikan dalam array.

Sintaks

Sintaksnya seperti ini:

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

Dimana json_doc adalah dokumen JSON, dan setiap path argumen adalah jalur di dalam dokumen.

Contoh

Berikut ini contoh untuk didemonstrasikan.

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.name');

Hasil:

+----------------------------------------+
| JSON_EXTRACT(@json_document, '$.name') |
+----------------------------------------+
| "Wag"                                  |
+----------------------------------------+

Beberapa Jalur

Berikut adalah contoh menentukan beberapa jalur untuk mengembalikan beberapa nilai dari dokumen JSON.

Saat Anda mengembalikan beberapa nilai, nilai tersebut dikembalikan dalam array.

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.name', '$.weight');

Hasil:

+----------------------------------------------------+
| JSON_EXTRACT(@json_document, '$.name', '$.weight') |
+----------------------------------------------------+
| ["Wag", 20]                                        |
+----------------------------------------------------+

Jalur yang Tidak Ada

Melewati jalur yang tidak ada di dokumen JSON menghasilkan NULL .

Contoh:

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.color');

Hasil:

+-----------------------------------------+
| JSON_EXTRACT(@json_document, '$.color') |
+-----------------------------------------+
| NULL                                    |
+-----------------------------------------+

Namun, jika beberapa jalur dilewatkan, dan setidaknya satu dari jalur tersebut cocok, maka nilai yang cocok akan diekstraksi dan dikembalikan dalam sebuah larik. Ini benar meskipun hanya satu nilai yang diekstraksi.

Contoh:

SET @json_document = '
    { 
        "name": "Wag", 
        "type": "Dog", 
        "weight": 20 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.name', '$.color');

Hasil:

+---------------------------------------------------+
| JSON_EXTRACT(@json_document, '$.name', '$.color') |
+---------------------------------------------------+
| ["Wag"]                                           |
+---------------------------------------------------+

Array

Berikut ini contoh mengekstrak data dari array:

SET @json_document = '
    { 
        "_id" : 1, 
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';
SELECT JSON_EXTRACT(@json_document, '$.awards[0]');

Hasil:

+---------------------------------------------+
| JSON_EXTRACT(@json_document, '$.awards[0]') |
+---------------------------------------------+
| "Top Dog"                                   |
+---------------------------------------------+

Array berbasis nol, jadi $.awards[0] mengekstrak elemen pertama dari awards larik.

Objek Bersarang

Berikut ini contoh mengekstrak data dari objek yang bersarang di dalam objek lain:

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog", 
                "Sumo 2020" : "Biggest Dog"
            }
        }
    }
';
SELECT JSON_EXTRACT(
    @json_document, 
    '$.details.awards.New York Marathon'
    ) AS Result;

Hasil:

+---------------+
| Result        |
+---------------+
| "Fastest Dog" |
+---------------+

Namun, jika kami ingin mengekstrak semua penghargaan, kami dapat mempersingkat jalur ke $.details.awards :

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog", 
                "Sumo 2020" : "Biggest Dog"
            }
        }
    }
';
SELECT JSON_EXTRACT(
    @json_document, 
    '$.details.awards'
    ) AS Result;

Hasil:

+---------------------------------------------------------------------------------------------------+
| Result                                                                                            |
+---------------------------------------------------------------------------------------------------+
| {"Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog"} |
+---------------------------------------------------------------------------------------------------+

Mempercantik Hasilnya

Kita dapat membuat hasilnya lebih mudah dibaca dengan melewatkan JSON_EXTRACT() ke JSON_DETAILED() fungsi:

SET @json_document = '
    { 
        "_id" : 1, 
        "name" : "Wag", 
        "details" : {
            "type" : "Dog", 
            "weight" : 20,
            "awards" : { 
                "Florida Dog Awards" : "Top Dog", 
                "New York Marathon" : "Fastest Dog", 
                "Sumo 2020" : "Biggest Dog"
            }
        }
    }
';
SELECT 
    JSON_DETAILED(
        JSON_EXTRACT(
            @json_document, 
            '$.details.awards'
            ) 
    ) AS Result;

Hasil:

+------------------------------------------------+
| Result                                         |
+------------------------------------------------+
| {
    "Florida Dog Awards": "Top Dog",
    "New York Marathon": "Fastest Dog",
    "Sumo 2020": "Biggest Dog"
} |
+------------------------------------------------+

Argumen Null

Jika ada argumen NULL , hasilnya adalah NULL :

SELECT 
    JSON_EXTRACT(null, '$.type'),
    JSON_EXTRACT('{"a":1}', null);

Hasil:

+------------------------------+-------------------------------+
| JSON_EXTRACT(null, '$.type') | JSON_EXTRACT('{"a":1}', null) |
+------------------------------+-------------------------------+
| NULL                         | NULL                          |
+------------------------------+-------------------------------+

Jumlah Parameter Salah

Tidak memberikan argumen akan menyebabkan kesalahan:

SELECT JSON_EXTRACT();

Hasil:

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

Sama halnya ketika Anda memberikan argumen yang terlalu sedikit atau terlalu banyak:

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

Hasil:

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

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Menggunakan Plugin Audit MariaDB untuk Keamanan Database

  2. Cara Menghitung Usia di MariaDB

  3. MariaDB JSON_REPLACE() Dijelaskan

  4. Bagaimana RPAD() Bekerja di MariaDB

  5. Otomasi Basis Data di Balik Identitas Elektronik Baru Swedia Freja eID