sql >> Databasteknik >  >> RDS >> SQLite

JSON_INSERT() vs JSON_SET() vs JSON_REPLACE() i SQLite

SQLite tillhandahåller flera funktioner för att infoga, ställa in och ersätta värden i ett JSON-dokument. Specifikt tillhandahåller den json_insert() , json_set() , och json_replace() .

Dessa funktioner utför liknande uppgifter, och du kan ibland använda dem omväxlande till en viss punkt.

Men det är definitivt en tydlig skillnad mellan varje funktion.

Skillnaden

Följande tabell beskriver skillnaden mellan dessa funktioner:

Funktion Skriv över om det redan finns? Skapa om det inte finns?
json_insert() Nej Ja
json_replace() Ja Nej
json_set() Ja Ja

Så skillnaden mellan dessa funktioner ligger i hur de hanterar befintliga och icke-existerande nycklar/värden.

Exempel

Här är några enkla exempel för att visa hur varje funktion hanterar befintliga och icke-existerande nycklar/värden.

När nyckeln redan finns

Så här hanterar varje funktion uppdatering av en nyckel som redan finns:

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;

Resultat:

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

Vi kan se att json_insert() uppdaterade ingenting, men de andra två funktionerna gjorde det.

Det är en liknande sak med arrayer:

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;

Resultat:

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

När nyckeln inte finns

Så här händer när nyckeln inte finns:

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;

Resultat:

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

Vi kan se att json_replace() infogade inte det nya nyckel/värdeparet, men det gjorde de andra två funktionerna.

Samma affär med arrayer:

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;

Resultat:

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

Detta kan också göras med [#] sökväg:

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;

Resultat:

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

En fördel med att använda [#] är att du inte behöver veta hur många element som redan finns i arrayen.


  1. finns det någon funktion för att översätta data i sql

  2. MySQL – Vänta i sekunder med SELECT SLEEP()

  3. Anslutning misslyckades:Åtkomst nekad för användaren 'root'@'localhost' (med lösenord:JA) från php-funktionen

  4. Hämta tecknet mellan de två första specialtecknen i SQL