sql >> Database >  >> RDS >> MariaDB

MariaDB JSON_SET() uitgelegd

In MariaDB, JSON_SET() is een ingebouwde functie die gegevens bijwerkt of invoegt in een JSON-document en het resultaat retourneert.

JSON_SET() kan gegevens bijwerken en invoegen, terwijl JSON_INSERT() kan alleen gegevens invoegen, en JSON_REPLACE() kan alleen gegevens bijwerken.

Syntaxis

De syntaxis gaat als volgt:

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

Waar:

  • json_doc is het JSON-document.
  • path is het pad van het element waarvoor u gegevens wilt invoegen of de waarde wilt bijwerken.
  • val is de nieuwe waarde.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

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

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

Resultaat:

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

In dit geval heb ik de waarde van het type . bijgewerkt lid Cat tot Dog .

Array-elementen

Om een ​​array-element bij te werken of in te voegen, specificeert u de index van het element:

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

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

Resultaat:

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

In dit geval is het tweede array-element bijgewerkt met de nieuwe waarde. Arrays zijn gebaseerd op nul, en dus $.scores[1] verwijst naar het tweede element in de array.

Gegevens invoegen

De vorige voorbeelden hebben bestaande gegevens bijgewerkt. Hier is een voorbeeld van het invoegen van nieuwe gegevens:

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

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

Resultaat:

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

Hier hebben we een nieuw sleutel/waarde-paar ingevoegd ("weight": 10 ).

Hieronder ziet u een voorbeeld van het toevoegen van een nieuw element aan een array:

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

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

Resultaat:

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

Dit arrayvoorbeeld kan ook worden gedaan met JSON_ARRAY_INSERT() of JSON_ARRAY_APPEND() .

Meerdere paden

De syntaxis maakt het mogelijk om waarden op meerdere paden in te stellen/bij te werken met een enkele aanroep van JSON_SET() .

Voorbeeld:

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

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

Resultaat:

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

In het volgende voorbeeld voegen we een nieuwe waarde in een array in en werken een andere bij:

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

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

Resultaat:

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

Nullargumenten

Als de json_doc of een van de path argumenten is null , het resultaat is NULL . Maar als de value argument is null , dan wordt de waarde vervangen door 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;

Resultaat:

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

In het volgende voorbeeld ontbreekt een van de padargumenten bij elke aanroep naar JSON_SET() . In beide gevallen is het resultaat 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;

Resultaat:

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

Onjuist aantal parameters

Aanroepen van JSON_SET() zonder een argument resulteert in een fout:

SELECT JSON_SET();

Resultaat:

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

Het is hetzelfde als er niet genoeg argumenten worden doorgegeven:

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

Resultaat:

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

  1. Een vooraf ingevulde database bijwerken

  2. Gegevens kopiëren naar een andere tabel

  3. CURRENT_TIMESTAMP Voorbeelden in SQL Server (T-SQL)

  4. Heroku PostgreSQL GROUP_BY-fout in Rails-app