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

MariaDB JSON_VALUE() vs JSON_QUERY():Apa Bedanya?

Di MariaDB, JSON_VALUE() fungsi dan JSON_QUERY() fungsi melakukan hal serupa – mereka mengembalikan data dari dokumen JSON.

Jadi apa bedanya?

Perbedaan utamanya adalah JSON_VALUE() mengembalikan nilai skalar, sedangkan JSON_QUERY() mengembalikan array dan objek.

Definisi

Diberikan dokumen JSON, setiap fungsi melakukan hal berikut:

  • JSON_VALUE() mengembalikan skalar yang ditentukan oleh jalur.
  • JSON_QUERY() mengembalikan objek atau larik yang ditentukan oleh jalur.

Pemahaman saya adalah bahwa ia bekerja dengan cara ini karena standar SQL.

Jika ini menyebabkan masalah bagi Anda, Anda mungkin menemukan JSON_EXTRACT() berfungsi lebih bermanfaat.

Skalar

Berikut adalah contoh untuk mendemonstrasikan apa yang terjadi ketika kami mencoba menggunakan kedua fungsi untuk mengekstrak skalar dari dokumen JSON.

SET @json_document = '
    { 
        "name" : "Rufus",
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';
SELECT 
    JSON_VALUE(@json_document, '$.name') AS JSON_VALUE,
    JSON_QUERY(@json_document, '$.name') AS JSON_QUERY;

Hasil:

+------------+------------+
| JSON_VALUE | JSON_QUERY |
+------------+------------+
| Rufus      | NULL       |
+------------+------------+

JSON_VALUE() mengembalikan skalar seperti yang diharapkan, tetapi JSON_QUERY() mengembalikan NULL . Ini diharapkan, karena JSON_QUERY() hanya mengembalikan array dan objek.

Ini adalah hasil yang sama jika kita mencoba mengembalikan data skalar dari array:

SET @json_document = '
    { 
        "name" : "Rufus",
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';
SELECT 
    JSON_VALUE(@json_document, '$.awards[0]') AS JSON_VALUE,
    JSON_QUERY(@json_document, '$.awards[0]') AS JSON_QUERY;

Hasil:

+------------+------------+
| JSON_VALUE | JSON_QUERY |
+------------+------------+
| Top Dog    | NULL       |
+------------+------------+

Objek

Inilah yang terjadi ketika kami mencoba menggunakan kedua fungsi untuk mengembalikan objek utuh:

SET @json_document = '{ "name" : "Rufus" }';

SELECT 
    JSON_VALUE(@json_document, '$') AS JSON_VALUE,
    JSON_QUERY(@json_document, '$') AS JSON_QUERY;

Hasil:

+------------+----------------------+
| JSON_VALUE | JSON_QUERY           |
+------------+----------------------+
| NULL       | { "name" : "Rufus" } |
+------------+----------------------+

Kali ini JSON_QUERY() fungsi yang berhasil.

Array

Inilah yang terjadi ketika kami mencoba menggunakan kedua fungsi untuk mengembalikan seluruh array:

SET @json_document = '
    { 
        "name" : "Rufus",
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';
SELECT 
    JSON_VALUE(@json_document, '$.awards') AS JSON_VALUE,
    JSON_QUERY(@json_document, '$.awards') AS JSON_QUERY;

Hasil:

+------------+------------------------------------------+
| JSON_VALUE | JSON_QUERY                               |
+------------+------------------------------------------+
| NULL       | [ "Top Dog", "Best Dog", "Biggest Dog" ] |
+------------+------------------------------------------+

Sekali lagi, JSON_QUERY() fungsi berhasil.

Namun, tidak ada fungsi yang berhasil saat kita menggunakan operator wildcard array untuk memilih semua elemen skalar dari array. Dalam hal ini, JSON_EXTRACT() datang untuk menyelamatkan:

SET @json_document = '
    { 
        "name" : "Rufus",
        "awards" : [ "Top Dog", "Best Dog", "Biggest Dog" ] 
    }
';
SELECT 
    JSON_VALUE(@json_document, '$.awards[*]') AS JSON_VALUE,
    JSON_QUERY(@json_document, '$.awards[*]') AS JSON_QUERY,
    JSON_EXTRACT(@json_document, '$.awards[*]') AS JSON_EXTRACT;

Hasil:

+------------+------------+----------------------------------------+
| JSON_VALUE | JSON_QUERY | JSON_EXTRACT                           |
+------------+------------+----------------------------------------+
| Top Dog    | NULL       | ["Top Dog", "Best Dog", "Biggest Dog"] |
+------------+------------+----------------------------------------+

Namun, jika elemen array adalah array atau objek, maka JSON_QUERY() mengembalikannya dengan baik:

SET @json_document = '
    { 
        "name" : "Rufus",
        "scores" : [ [1, 2, 3], [8, 9], { "a" : 1 } ] 
    }
';
SELECT 
    JSON_VALUE(@json_document, '$.scores') AS JSON_VALUE,
    JSON_QUERY(@json_document, '$.scores') AS JSON_QUERY;

Hasil:

+------------+------------------------------------+
| JSON_VALUE | JSON_QUERY                         |
+------------+------------------------------------+
| NULL       | [ [1, 2, 3], [8, 9], { "a" : 1 } ] |
+------------+------------------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Berurusan dengan MySQL Long Running Query

  2. Memaksimalkan Efisiensi Kueri Basis Data untuk MySQL - Bagian Satu

  3. Bagaimana ELT() Bekerja di MariaDB

  4. 2 Cara Mengganti Substring di MariaDB

  5. Pertimbangan Keamanan untuk Penerapan MariaDB di Lingkungan Cloud Hibrida