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

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

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

Синтаксис

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

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

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

Пример

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

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

Резултат:

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

Тук вмъкнах "type": "Dog" в документа.

В този случай използвах $.type като пътеката. Следователно, type е ключът и Dog е стойността.

Когато пътят вече съществува

Предаването на път, който вече съществува в документа JSON, води до връщане на оригиналния документ непроменен.

Пример:

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

Резултат:

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

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

Ето пример за вмъкване на масив в JSON документ:

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

Резултат:

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

Добавяне към масиви

Ето пример за използване на JSON_INSERT() за добавяне на данни към масив:

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

Резултат:

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

Въпреки това, въпреки че работи добре за този пример, лесно можеше да се провали. Например, ако се опитаме да вмъкнем стойността на различно място в масива, тя не работи:

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

Резултат:

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

За да вмъкнете стойности в масив, използвайте JSON_ARRAY_INSERT() функция вместо това.

Освен това, въпреки че успяхме да добавим стойност към масив в горния пример, вероятно е по-добре да използвате JSON_ARRAY_APPEND() функция, тъй като е проектирана специално за тази цел.

Вложени обекти

Ето пример за вмъкване на стойност в обект, вложен в друг обект:

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'
    );

Резултат:

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

Украсете резултата

Можем да използваме JSON_DETAILED() функция, за да направи резултата по-лесен за четене:

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'
        )
    );

Резултат:

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

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

Ако някой от json_document или path аргументите са NULL , резултатът е NULL :

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

Резултат:

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

Ако обаче value аргументът е NULL , ключът се добавя на посочения път със стойност null :

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

Резултат:

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

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

Предоставянето на без аргументи води до грешка:

SELECT JSON_INSERT();

Резултат:

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

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

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

Резултат:

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

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

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

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. Как работи SUBTIME() в MariaDB

  2. Как да съкратите текст с многоточие в MariaDB

  3. Как да спрете или намалите SST операцията на клъстер Galera

  4. Как LTRIM() работи в MariaDB

  5. Как работи TIMEDIFF() в MariaDB