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

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

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

JSON_SET() може да актуализира и вмъква данни, докато JSON_INSERT() може само да вмъква данни и JSON_REPLACE() може само да актуализира данни.

Синтаксис

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

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

Къде:

  • json_doc е JSON документът.
  • path е пътят на елемента, за който да се вмъкнат данни или да се актуализира стойността в.
  • val е новата стойност.

Пример

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

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

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

Резултат:

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

В този случай актуализирах стойността на type член Cat до Dog .

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

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

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

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

Резултат:

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

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

Вмъкване на данни

Предишните примери актуализираха съществуващите данни. Ето пример за вмъкване на нови данни:

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

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

Резултат:

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

Тук вмъкнахме нова двойка ключ/стойност ("weight": 10 ).

По-долу е даден пример за добавяне на нов елемент към масив:

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

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

Резултат:

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

Този пример за масив може да се направи и с JSON_ARRAY_INSERT() или JSON_ARRAY_APPEND() .

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

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

Пример:

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

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

Резултат:

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

В следващия пример вмъкваме нова стойност в масив и актуализираме друга:

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

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

Резултат:

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

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

Ако json_doc или някой от path аргументите е null , резултатът е NULL . Но ако value аргументът е null , след което стойността се заменя с 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;

Резултат:

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

В следващия пример един от аргументите на пътя липсва от всяко извикване към JSON_SET() . И в двата случая резултатът е 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;

Резултат:

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

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

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

SELECT JSON_SET();

Резултат:

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

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

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

Резултат:

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. MariaDB ROWNUM() Обяснено

  2. MariaDB JSON_CONTAINS() Обяснено

  3. Как QUARTER() работи в MariaDB

  4. Как да инсталирате MariaDB 10 на RHEL 8

  5. MariaDB JSON_OBJECTAGG() Обяснено