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

Jak działa krok JSONPath Wildcard (**) w MariaDB

Podczas pracy z JSON w MariaDB możesz używać wyrażeń JSONPath do manipulowania danymi w dokumencie JSON.

Jedną z potężnych funkcji udostępnianych przez MariaDB jest krok z symbolem wieloznacznym (** ). Pozwala to na rekursywne wybieranie wszystkich elementów podrzędnych bieżącego elementu.

Krok z symbolem wieloznacznym jest niestandardowym rozszerzeniem i jest również obsługiwany w tym samym znaczeniu w MySQL.

Przykład

Oto przykład do zademonstrowania:

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

SELECT JSON_EXTRACT(@json, '$**.name');

Wynik:

+------------------------------------+
| JSON_EXTRACT(@json, '$**.name')    |
+------------------------------------+
| ["Wag", "Bark", "Meow", "Scratch"] |
+------------------------------------+

Krok z symbolem wieloznacznym przeszedł przez wszystkie obiekty i wybrał wartości z ich name członków.

W tym przypadku ten sam wynik moglibyśmy osiągnąć innym selektorem. Selektor tablic wieloznacznych pomógłby nam uzyskać ten sam wynik:

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

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

Wynik:

+------------------------------------+
| JSON_EXTRACT(@json, '$[*].name')   |
+------------------------------------+
| ["Wag", "Bark", "Meow", "Scratch"] |
+------------------------------------+

Ten sam wynik.

Jednak sytuacja się zmienia, jeśli użyjemy innego dokumentu.

Przykład 2

W poniższym przykładzie otrzymujemy inny wynik między krokiem wieloznacznym a selektorem tablicy:

SET @json = '[
    { 
        "name" : "Homer", 
        "pets" : [
            { 
            "name" : "Wag",
            "type" : "Dog"
            },
            { 
            "name" : "Scratch",
            "type" : "Cat"
            }
        ]    
    }
]';

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

Wynik:

+---------------------------------+----------------------------------+
| JSON_EXTRACT(@json, '$**.name') | JSON_EXTRACT(@json, '$[*].name') |
+---------------------------------+----------------------------------+
| ["Homer", "Wag", "Scratch"]     | ["Homer"]                        |
+---------------------------------+----------------------------------+

Inny wynik.

Wyniki będą oczywiście zależeć od dokumentu i rzeczywistej konstrukcji wyrażenia JSONPath, a użyte selektory będą zależeć od Twoich wymagań.

Należy pamiętać, że krok z symbolem wieloznacznym nie może być ostatnim krokiem w wyrażeniu JSONPath. Po nim musi następować krok selektora tablicy lub elementu obiektu.

Przykład 3

Oto przykład, który 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"]           |
+-------------------------------------+

Tablice są liczone od zera, więc $**.sizes[1] odnosi się do drugiego elementu we wszystkich sizes tablice.


  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 UNCOMPRESS() w MariaDB

  2. Porównanie serwera MariaDB z klastrem MariaDB

  3. POKAŻ TABELE w MariaDB

  4. Uprość zarządzanie kontami użytkowników dzięki MariaDB MaxScale 2.2 i MariaDB Server 10.3

  5. Pierwsze kroki z MariaDB przy użyciu Dockera, Java Spring i JDBC