sql >> Databáze >  >> RDS >> MariaDB

MariaDB JSON_VALUE() vs JSON_QUERY():Jaký je rozdíl?

V MariaDB, JSON_VALUE() funkce a JSON_QUERY() funkce dělají podobné věci – vracejí data z dokumentu JSON.

Jaký je tedy rozdíl?

Hlavní rozdíl je v tom, že JSON_VALUE() vrátí skalární hodnoty, zatímco JSON_QUERY() vrací pole a objekty.

Definice

Vzhledem k dokumentu JSON každá funkce dělá následující:

  • JSON_VALUE() vrátí skalár určený cestou.
  • JSON_QUERY() vrátí objekt nebo pole určené cestou.

Chápu to tak, že to takto funguje díky standardu SQL.

Pokud vám to způsobuje problémy, můžete najít JSON_EXTRACT() funkce užitečnější.

Skaláry

Zde je příklad demonstrující, co se stane, když se pokusíme použít obě funkce k extrahování skaláru z dokumentu 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;

Výsledek:

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

JSON_VALUE() vrátil skalár podle očekávání, ale JSON_QUERY() vrátil NULL . To se očekává, protože JSON_QUERY() vrací pouze pole a objekty.

Je to stejný výsledek, pokud se pokusíme vrátit skalární data z pole:

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;

Výsledek:

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

Objekty

Zde je to, co se stane, když se pokusíme použít obě funkce k vrácení celého objektu:

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

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

Výsledek:

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

Tentokrát je to JSON_QUERY() funkce, která uspěje.

Pole

Zde je to, co se stane, když se pokusíme použít obě funkce k vrácení celého pole:

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;

Výsledek:

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

Opět JSON_QUERY() funkce úspěšná.

Žádná funkce však neuspěje, když použijeme zástupný operátor pole k výběru všech skalárních prvků z pole. V tomto případě JSON_EXTRACT() přichází na pomoc:

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;

Výsledek:

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

Pokud jsou však prvky pole pole nebo objekty, pak JSON_QUERY() vrátí je v pořádku:

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;

Výsledek:

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

  1. Aktualizujte sloupce hodnotami Null

  2. Povolení TLS v Oracle Apps R12.2

  3. Základy správy datových souborů na SQL Serveru

  4. Obsahuje MS SQL Server hranice rozsahu?