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

MariaDB JSON_SET() Objaśnienie

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

JSON_SET() może aktualizować i wstawiać dane, podczas gdy JSON_INSERT() może tylko wstawiać dane, a JSON_REPLACE() może tylko aktualizować dane.

Składnia

Składnia wygląda tak:

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

Gdzie:

  • json_doc jest dokumentem JSON.
  • path jest ścieżką elementu, dla którego należy wstawić dane lub zaktualizować wartość.
  • val to nowa wartość.

Przykład

Oto przykład do zademonstrowania.

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Cat" 
    }
';

SELECT JSON_SET(@json, '$.type', 'Dog');

Wynik:

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

W tym przypadku zaktualizowałem wartość type członek Cat do Dog .

Elementy tablicy

Aby zaktualizować lub wstawić element tablicy, określ indeks elementu:

SET @json = '
    { 
        "name" : "Wag", 
        "scores" : [8, 0, 9] 
    }
';

SELECT JSON_SET(@json, '$.scores[1]', 7);

Wynik:

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

W tym przypadku drugi element tablicy został zaktualizowany nową wartością. Tablice są oparte na zerach, więc $.scores[1] odnosi się do drugiego elementu w tablicy.

Wstaw dane

Poprzednie przykłady zaktualizowały istniejące dane. Oto przykład wstawiania nowych danych:

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Dog" 
    }
';

SELECT JSON_SET(@json, '$.weight', 10);

Wynik:

+----------------------------------------------+
| JSON_SET(@json, '$.weight', 10)              |
+----------------------------------------------+
| {"name": "Wag", "type": "Dog", "weight": 10} |
+----------------------------------------------+

Tutaj wstawiliśmy nową parę klucz/wartość ("weight": 10 ).

Poniżej znajduje się przykład dodawania nowego elementu do tablicy:

SET @json = '
    { 
        "name" : "Wag", 
        "scores" : [8, 0, 9] 
    }
';

SELECT JSON_SET(@json, '$.scores[3]', 7);

Wynik:

+-----------------------------------------+
| JSON_SET(@json, '$.scores[3]', 7)       |
+-----------------------------------------+
| {"name": "Wag", "scores": [8, 0, 9, 7]} |
+-----------------------------------------+

Ten przykład tablicy można również wykonać za pomocą JSON_ARRAY_INSERT() lub JSON_ARRAY_APPEND() .

Wiele ścieżek

Składnia umożliwia ustawianie/aktualizowanie wartości w wielu ścieżkach za pomocą jednego wywołania JSON_SET() .

Przykład:

SET @json = '
    { 
        "name" : "Scratch", 
        "type" : "Rat"
    }
';

SELECT JSON_SET(@json, '$.type', 'Cat', '$.weight', 10);

Wynik:

+--------------------------------------------------+
| JSON_SET(@json, '$.type', 'Cat', '$.weight', 10) |
+--------------------------------------------------+
| {"name": "Scratch", "type": "Cat", "weight": 10} |
+--------------------------------------------------+

W następnym przykładzie wstawiamy nową wartość do tablicy i aktualizujemy inną:

SET @json = '{ "scores" : [ 0, 1, 2 ] }';

SELECT 
    JSON_SET(
        @json, 
        '$.scores[1]', "a", 
        '$.scores[3]', "b"
    ) AS Result;

Wynik:

+------------------------------+
| Result                       |
+------------------------------+
| {"scores": [0, "a", 2, "b"]} |
+------------------------------+

Argumenty zerowe

Jeśli json_doc lub dowolna ze path argumenty są null , wynik to NULL . Ale jeśli value argument jest null , wartość jest zastępowana null .

SELECT 
    JSON_SET(null, '$.a', 1) AS a,
    JSON_SET('{"a":1}', null, 1) AS b,
    JSON_SET('{"a":1}', '$.a', null) AS c;

Wynik:

+------+------+-------------+
| a    | b    | c           |
+------+------+-------------+
| NULL | NULL | {"a": null} |
+------+------+-------------+

W poniższym przykładzie brakuje jednego z argumentów ścieżki w każdym wywołaniu JSON_SET() . W obu przypadkach wynikiem jest NULL :

SET @json = '
    { 
        "name" : "Wag", 
        "type" : "Cat" 
    }
';

SELECT 
    JSON_SET(@json, null, 'Bark', '$.type', 'Dog') AS a,
    JSON_SET(@json, '$.name', 'Bark', null, 'Dog') AS b;

Wynik:

+------+------+
| a    | b    |
+------+------+
| NULL | NULL |
+------+------+

Nieprawidłowa liczba parametrów

Wywołanie JSON_SET() bez argumentu powoduje błąd:

SELECT JSON_SET();

Wynik:

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

Tak samo jest, gdy nie przekazano wystarczającej liczby argumentów:

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

Wynik:

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

  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 zautomatyzować przełączanie awaryjne bazy danych za pomocą ClusterControl

  2. Jak REGEXP_REPLACE() działa w MariaDB

  3. Co to jest MariaDB TX? Jak zarządzać nowym widelcem MariaDB MySQL!

  4. Jak działa POKAŻ UKŁADANIE w MariaDB

  5. MariaDB Backup i PostgreSQL w chmurze — ClusterControl w wersji 1.6.1