MariaDB
 sql >> Baza danych >  >> RDS >> MariaDB

Jak zwrócić elementy z tablicy JSON w MariaDB

MariaDB zawiera dwa selektory, które umożliwiają nam wybieranie elementów z tablic JSON:

  • [N] wybiera numer elementu N w tablicy (na przykład [0] aby wybrać pierwszy element).
  • [*] zaznacza wszystkie elementy w tablicy.

Można ich używać w wielu funkcjach JSON zawartych w MariaDB. Poniższe przykłady używają ich z JSON_EXTRACT() funkcji w celu zwrócenia wybranych elementów tablicy.

Przykład – [N]

Oto prosty przykład pokazujący, jak wybrać pojedynczy element tablicy:

SELECT JSON_EXTRACT('[1,2,3]', '$[1]');

Wynik:

+---------------------------------+
| JSON_EXTRACT('[1,2,3]', '$[1]') |
+---------------------------------+
| 2                               |
+---------------------------------+

Tablice są liczone od zera, więc $[1] wybiera drugi element tablicy.

Oto kolejny przykład, tym razem z nieco większym dokumentem JSON:

SET @json = '
    { 
        "_id": 1, 
        "product": "Left Handed Screwdriver", 
        "sizes": [ "S", "M", "L" ] 
    }
';

SELECT JSON_EXTRACT(@json, '$.sizes[1]');

Wynik:

+-----------------------------------+
| JSON_EXTRACT(@json, '$.sizes[1]') |
+-----------------------------------+
| "M"                               |
+-----------------------------------+

W tym przypadku .sizes określa sizes element członkowski obiektu, a więc $.sizes[1] wybiera drugi element w sizes tablica.

Przykład — [*]

[*] selektor wybiera wszystkie elementy w tablicy.

Przykład:

SET @json = '
    { 
        "_id": 1, 
        "product": "Left Handed Screwdriver", 
        "sizes": [ "S", "M", "L" ] 
    }
';

SELECT JSON_EXTRACT(@json, '$.sizes[*]');

Wynik:

+-----------------------------------+
| JSON_EXTRACT(@json, '$.sizes[*]') |
+-----------------------------------+
| ["S", "M", "L"]                   |
+-----------------------------------+

W tym przypadku wynik wygląda dokładnie tak samo, jak oryginalna tablica, w takim przypadku mógł zostać zwrócony przez samo określenie $.sizes .

Selektory wielu tablic

Ale oto kolejny przykład, który używa dwóch selektorów tablicowych.

Najpierw używamy selektora symboli wieloznacznych, aby wybrać wszystkie elementy w tablicy. Następnie używamy innego selektora tablicy, aby wybrać tylko drugi element w tablicy, który jest zagnieżdżony w tych elementach:

SET @json = '
{ 
    "products" : 
    [
        { 
            "_id": 1, 
            "product": "Left Handed Screwdriver", 
            "sizes": [ "S", "M", "L" ] 
        },
        { 
            "_id": 2, 
            "product": "Long Weight", 
            "sizes": [ 8, 7, 10 ] 
        },
        { 
            "_id": 3, 
            "product": "Bottomless Coffee Cup", 
            "sizes": [ "Tall", "Grande", "Venti" ] 
        }
    ]
}
';

SELECT JSON_EXTRACT(@json, '$.products[*].sizes[1]');

Wynik:

+-----------------------------------------------+
| JSON_EXTRACT(@json, '$.products[*].sizes[1]') |
+-----------------------------------------------+
| ["M", 7, "Grande"]                            |
+-----------------------------------------------+

Krok z symbolami wieloznacznymi

Jeśli Twój dokument JSON zawiera wiele tablic o tej samej nazwie, niektóre zagnieżdżone na różnych poziomach lub we własnym obiekcie, możesz wybrać je wszystkie za pomocą kroku z symbolem wieloznacznym (** ). Krok z symbolem wieloznacznym rekursywnie wybiera wszystkie elementy podrzędne bieżącego elementu.

Tutaj używamy go do tworzenia wyrażenia JSONPath, które zwraca drugi element tablicy ze wszystkich tablic o nazwie sizes , w tym tablice zagnieżdżone w innych dokumentach:

SET @json = '[
    { 
        "_id": 1, 
        "product": { 
            "name" : "Tuxedo", 
            "color" : "Blue",
            "sizes": [ "S", "M", "L" ],
            "accessories" : {
                "belt" : {
                    "color" : "Navy",
                    "sizes" : [ "Wide", "Narrow" ]
                },
                "tie" : {
                    "color" : "Black",
                    "sizes" : [ "Short", "Medium", "Long" ]
                }
            }
        }
    }
]';

SELECT JSON_EXTRACT(@json, '$**.sizes[1]');

Wynik:

+-------------------------------------+
| JSON_EXTRACT(@json, '$**.sizes[1]') |
+-------------------------------------+
| ["M", "Narrow", "Medium"]           |
+-------------------------------------+

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak działa MID() w MariaDB

  2. Uruchamianie Vitess i MySQL z ClusterControl

  3. MariaDB FOUND_ROWS() wyjaśnione

  4. 5 prostych kroków do rozpoczęcia pracy z MariaDB i Tableau

  5. Jak przeprowadzić migrację z Oracle DB do MariaDB