sql >> Database >  >> RDS >> SQLite

JSON_INSERT() versus JSON_SET() versus JSON_REPLACE() in SQLite

SQLite biedt verschillende functies voor het invoegen, instellen en vervangen van waarden in een JSON-document. In het bijzonder biedt het json_insert() , json_set() , en json_replace() .

Deze functies voeren vergelijkbare taken uit en u kunt ze soms tot op zekere hoogte door elkaar gebruiken.

Maar er is zeker een duidelijk verschil tussen elke functie.

Het verschil

De volgende tabel geeft het verschil tussen deze functies weer:

Functie Overschrijven indien al bestaat? Maken als niet bestaat?
json_insert() Nee Ja
json_replace() Ja Nee
json_set() Ja Ja

Het verschil tussen deze functies is dus hoe ze omgaan met bestaande en niet-bestaande sleutels/waarden.

Voorbeelden

Hier zijn enkele eenvoudige voorbeelden om te laten zien hoe elke functie omgaat met bestaande en niet-bestaande sleutels/waarden.

Als de sleutel al bestaat

Hier is hoe elke functie omgaat met het updaten van een sleutel die al bestaat:

SELECT 
    json_insert('{ "a" : 1 }', '$.a', 2) AS json_insert,
    json_replace('{ "a" : 1 }', '$.a', 2) AS json_replace,
    json_set('{ "a" : 1 }', '$.a', 2) AS json_set;

Resultaat:

+-------------+--------------+----------+
| json_insert | json_replace | json_set |
+-------------+--------------+----------+
| {"a":1}     | {"a":2}      | {"a":2}  |
+-------------+--------------+----------+

We kunnen zien dat json_insert() heeft niets bijgewerkt, maar de andere twee functies wel.

Hetzelfde geldt voor arrays:

SELECT 
    json_insert('[ 1, 2, 3 ]', '$[1]', 4) AS json_insert,
    json_replace('[ 1, 2, 3 ]', '$[1]', 4) AS json_replace,
    json_set('[ 1, 2, 3 ]', '$[1]', 4) AS json_set;

Resultaat:

+-------------+--------------+----------+
| json_insert | json_replace | json_set |
+-------------+--------------+----------+
| [1,2,3]     | [1,4,3]      | [1,4,3]  |
+-------------+--------------+----------+

Als de sleutel niet bestaat

Dit is wat er gebeurt als de sleutel niet bestaat:

SELECT 
    json_insert('{ "a" : 1 }', '$.b', 2) AS json_insert,
    json_replace('{ "a" : 1 }', '$.b', 2) AS json_replace,
    json_set('{ "a" : 1 }', '$.b', 2) AS json_set;

Resultaat:

+---------------+--------------+---------------+
|  json_insert  | json_replace |   json_set    |
+---------------+--------------+---------------+
| {"a":1,"b":2} | {"a":1}      | {"a":1,"b":2} |
+---------------+--------------+---------------+

We kunnen zien dat json_replace() heeft het nieuwe sleutel/waarde-paar niet ingevoegd, maar de andere twee functies wel.

Zelfde deal met arrays:

SELECT 
    json_insert('[ 1, 2, 3 ]', '$[3]', 4) AS json_insert,
    json_replace('[ 1, 2, 3 ]', '$[3]', 4) AS json_replace,
    json_set('[ 1, 2, 3 ]', '$[3]', 4) AS json_set;

Resultaat:

+-------------+--------------+-----------+
| json_insert | json_replace | json_set  |
+-------------+--------------+-----------+
| [1,2,3,4]   | [1,2,3]      | [1,2,3,4] |
+-------------+--------------+-----------+

Dit kan ook met de [#] pad:

SELECT 
    json_insert('[ 1, 2, 3 ]', '$[#]', 4) AS json_insert,
    json_replace('[ 1, 2, 3 ]', '$[#]', 4) AS json_replace,
    json_set('[ 1, 2, 3 ]', '$[#]', 4) AS json_set;

Resultaat:

+-------------+--------------+-----------+
| json_insert | json_replace | json_set  |
+-------------+--------------+-----------+
| [1,2,3,4]   | [1,2,3]      | [1,2,3,4] |
+-------------+--------------+-----------+

Een voordeel van het gebruik van [#] is dat je niet hoeft te weten hoeveel elementen er al in de array zitten.


  1. Hoe een WordPress MySQL-database in de cloud in te stellen

  2. Zal een SQL Server-taak een geplande uitvoering overslaan als deze al actief is?

  3. Een tussenliggende MySQL- of MariaDB-master vervangen door een Binlog-server met MaxScale

  4. Salesforce SOQL van Microsoft Office