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

MariaDB JSON_INSERT() Objaśnienie

W MariaDB, JSON_INSERT() to wbudowana funkcja, która wstawia dane do dokumentu JSON i zwraca wynik.

Składnia

Składnia wygląda tak:

JSON_INSERT(json_doc, path, val[, path, val] ...)

Gdzie json_doc jest dokumentem JSON, path jest ścieżką, do której należy wstawić dane, a val jest wartością do wstawienia w tej ścieżce.

Przykład

Oto przykład do zademonstrowania.

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

Wynik:

+----------------------------------------------+
| JSON_INSERT(@json_document, '$.type', "Dog") |
+----------------------------------------------+
| {"name": "Wag", "type": "Dog"}               |
+----------------------------------------------+

Tutaj wstawiłem "type": "Dog" do dokumentu.

W tym przypadku użyłem $.type jako ścieżka. Dlatego type to klucz i Dog jest wartością.

Kiedy ścieżka już istnieje

Przekazanie ścieżki, która już istnieje w dokumencie JSON, powoduje zwrócenie oryginalnego dokumentu w niezmienionej postaci.

Przykład:

SET @json_document = '
    { 
        "name": "Wag"
    }
';
SELECT JSON_INSERT(@json_document, '$.name', "Bark");

Wynik:

+-----------------------------------------------+
| JSON_INSERT(@json_document, '$.name', "Bark") |
+-----------------------------------------------+
| {"name": "Wag"}                               |
+-----------------------------------------------+

Wstawianie tablic

Oto przykład wstawiania tablicy do dokumentu JSON:

SET @json_document = '
    { 
        "name" : "Wag"
    }
';
SELECT JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]');

Wynik:

+--------------------------------------------------------+
| JSON_INSERT(@json_document, '$.scores', '[ 8, 7, 9 ]') |
+--------------------------------------------------------+
| {"name": "Wag", "scores": "[ 8, 7, 9 ]"}               |
+--------------------------------------------------------+

Dołączanie do tablic

Oto przykład użycia JSON_INSERT() aby dołączyć dane do tablicy:

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

Wynik:

+--------------------------------------------------------------+
| JSON_INSERT(@json_document, '$.awards[2]', "Biggest Dog")    |
+--------------------------------------------------------------+
| {"_id": 1, "awards": ["Top Dog", "Best Dog", "Biggest Dog"]} |
+--------------------------------------------------------------+

Jednak chociaż w tym przykładzie zadziałało dobrze, łatwo mogło się nie powieść. Na przykład, jeśli spróbujemy wstawić wartość w innym miejscu w tablicy, to nie zadziała:

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

Wynik:

+-----------------------------------------------------------+
| JSON_INSERT(@json_document, '$.awards[1]', "Biggest Dog") |
+-----------------------------------------------------------+
| {"_id": 1, "awards": ["Top Dog", "Best Dog"]}             |
+-----------------------------------------------------------+

Aby wstawić wartości do tablicy, użyj JSON_ARRAY_INSERT() funkcja zamiast.

Ponadto, chociaż w powyższym przykładzie udało nam się dodać wartość do tablicy, prawdopodobnie lepiej będzie użyć JSON_ARRAY_APPEND() funkcji, ponieważ został zaprojektowany specjalnie do tego celu.

Obiekty zagnieżdżone

Oto przykład wstawiania wartości do obiektu zagnieżdżonego w innym obiekcie:

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

Wynik:

{"_id": 1, "name": "Wag", "details": {"type": "Dog", "weight": 20, "awards": {"Florida Dog Awards": "Top Dog", "New York Marathon": "Fastest Dog", "Sumo 2020": "Biggest Dog"}}}

Precyzuj wynik

Możemy użyć JSON_DETAILED() funkcja ułatwiająca odczytanie wyniku:

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

Wynik:

{
    "_id": 1,
    "name": "Wag",
    "details": 
    {
        "type": "Dog",
        "weight": 20,
        "awards": 
        {
            "Florida Dog Awards": "Top Dog",
            "New York Marathon": "Fastest Dog",
            "Sumo 2020": "Biggest Dog"
        }
    }
}

Argumenty zerowe

Jeśli któryś z json_document lub path argumenty są NULL , wynik to NULL :

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

Wynik:

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

Jeśli jednak value argument to NULL , klucz jest dodawany w określonej ścieżce z wartością null :

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

Wynik:

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

Nieprawidłowa liczba parametrów

Brak argumentów skutkuje błędem:

SELECT JSON_INSERT();

Wynik:

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

Tak samo jest, gdy podasz za mało lub za dużo argumentów:

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

Wynik:

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

Podobne funkcje

JSON_REPLACE() funkcja może aktualizować istniejące dane.

JSON_SET() funkcja może aktualizować istniejące dane i wstawiać nowe dane. Więc JSON_SET() jest jak JSON_INSERT() i JSON_REPLACE() w jednej funkcji.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Radzenie sobie z zawodnymi sieciami podczas tworzenia rozwiązania HA dla MySQL lub MariaDB

  2. Jak FROM_BASE64() działa w MariaDB?

  3. MariaDB JSON_CONTAINS() Objaśnienie

  4. Automatyzacja baz danych za nową szwedzką tożsamością elektroniczną Freja eID

  5. Jak TRIM_ORACLE() działa w MariaDB