sql >> Database >  >> RDS >> MariaDB

MariaDB JSON_INSERT() uitgelegd

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

Syntaxis

De syntaxis gaat als volgt:

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

Waar json_doc is het JSON-document, path is het pad waar de gegevens moeten worden ingevoegd, en val is de waarde die op dat pad moet worden ingevoegd.

Voorbeeld

Hier is een voorbeeld om te demonstreren.

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

Resultaat:

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

Hier heb ik "type": "Dog" in het document.

In dit geval gebruikte ik $.type als het pad. Daarom type is de sleutel en Dog is de waarde.

Als het pad al bestaat

Als u een pad doorgeeft dat al bestaat in het JSON-document, wordt het oorspronkelijke document ongewijzigd geretourneerd.

Voorbeeld:

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

Resultaat:

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

Arrays invoegen

Hier is een voorbeeld van het invoegen van een array in een JSON-document:

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

Resultaat:

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

Toevoegen aan arrays

Hier is een voorbeeld van het gebruik van JSON_INSERT() om gegevens aan een array toe te voegen:

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

Resultaat:

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

Hoewel het voor dit voorbeeld prima werkte, had het gemakkelijk kunnen mislukken. Als we bijvoorbeeld proberen de waarde op een andere plaats in de array in te voegen, werkt het niet:

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

Resultaat:

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

Om waarden in een array in te voegen, gebruikt u de JSON_ARRAY_INSERT() in plaats daarvan functioneren.

Hoewel we in het bovenstaande voorbeeld een waarde aan een array hebben kunnen toevoegen, kunt u waarschijnlijk beter de JSON_ARRAY_APPEND() gebruiken functie, omdat het speciaal voor dat doel is ontworpen.

geneste objecten

Hier is een voorbeeld van het invoegen van een waarde in een object dat in een ander object is genest:

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

Resultaat:

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

Maak het resultaat mooier

We kunnen de JSON_DETAILED() . gebruiken functie om het resultaat beter leesbaar te maken:

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

Resultaat:

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

Nullargumenten

Als een van de json_document of path argumenten zijn NULL , het resultaat is NULL :

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

Resultaat:

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

Als de value argument is NULL , de sleutel wordt toegevoegd op het opgegeven pad, met een waarde van null :

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

Resultaat:

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

Onjuist aantal parameters

Het verstrekken van geen argumenten resulteert in een fout:

SELECT JSON_INSERT();

Resultaat:

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

Hetzelfde geldt wanneer u te weinig of te veel argumenten geeft:

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

Resultaat:

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

Vergelijkbare functies

De JSON_REPLACE() functie kan bestaande gegevens bijwerken.

De JSON_SET() functie kan bestaande gegevens bijwerken en nieuwe gegevens invoegen. Dus JSON_SET() is als JSON_INSERT() en JSON_REPLACE() in één functie.


  1. Back-up van PostgreSQL met pg_dump en pg_dumpall

  2. Download de taal die momenteel in SQL Server wordt gebruikt

  3. Hoe loop ik door een MySQL-query via PDO in PHP?

  4. ID voor automatisch verhogen toevoegen aan bestaande tabel?