MariaDB
 sql >> база данни >  >> RDS >> MariaDB

MariaDB JSON_REPLACE() Обяснено

В MariaDB, JSON_REPLACE() е вградена функция, която замества съществуващите стойности в JSON документ и връща резултата.

Синтаксис

Синтаксисът е така:

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

Пример

Ето пример за демонстрация.

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

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

Резултат:

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

В този случай замених стойността Cat с Dog .

Елементи на масив

За да замените елемент от масив, посочете индекса на елемента:

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

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

Резултат:

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

В този случай вторият елемент на масива е заменен с новата стойност. Масивите са базирани на нула и така $.scores[1] се отнася до втория елемент в масива.

Множество пътища

Синтаксисът позволява замяна на стойности по множество пътища с едно извикване на JSON_REPLACE() .

Когато се предоставят множество пътища, те се оценяват отляво надясно. Това означава, че резултатът от по-ранната оценка се използва като стойност за следващата.

Първо, ето пример, който заменя множество стойности в документ въз основа на техния ключ:

SET @json = '
    { 
        "name" : "Flutter", 
        "type" : "Bird",
        "weight" : 10
    }
';

SELECT JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20);

Резултат:

+------------------------------------------------------+
| JSON_REPLACE(@json, '$.type', 'Bat', '$.weight', 20) |
+------------------------------------------------------+
| {"name": "Flutter", "type": "Bat", "weight": 20}     |
+------------------------------------------------------+

Всяка стойност беше заменена според очакванията.

В следващия пример заменяме множество елементи в масив:

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

SELECT 
    JSON_REPLACE(
        @json, 
        '$.scores[2]', "a", 
        '$.scores[4]', "b"
    ) AS Result;

Резултат:

+------------------------------------+
| Result                             |
+------------------------------------+
| {"scores": [0, 1, "a", 3, "b", 5]} |
+------------------------------------+

Нулеви аргументи

Ако json_doc или някой от path аргументите е null , резултатът е NULL . Но ако value аргументът е null , след което стойността се заменя с null .

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

Резултат:

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

В следващия пример един от аргументите на пътя липсва от всяко извикване към JSON_REPLACE() . Това води до NULL се връща и за двете повиквания:

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

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

Резултат:

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

Неправилен брой параметри

Извикване на JSON_REPLACE() без аргумент води до грешка:

SELECT JSON_REPLACE();

Резултат:

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

Същото е, когато не се предават достатъчно аргументи:

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

Резултат:

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

Подобни функции

JSON_INSERT() функция може да вмъква нови данни.

JSON_SET() функцията може да вмъква нови данни и да актуализира съществуващи данни. Така че JSON_SET() е като JSON_INSERT() и JSON_REPLACE() в една функция.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мигриране от MySQL Enterprise към MariaDB 10.3

  2. Как работи SUBDATE() в MariaDB

  3. ProxySQL собствени клъстери с Kubernetes

  4. Как да разположите MariaDB клъстер за висока наличност

  5. Съображения за сигурност за внедряване на MariaDB в хибридна облачна среда