sql >> Database teknologi >  >> RDS >> SQLite

SQLite JSON_SET()

SQLite json_set() funktion giver os mulighed for at indsætte i eller erstatte en værdi i et JSON-dokument.

Vi sender den originale JSON som det første argument, når vi kalder funktionen, efterfulgt af en sti, der specificerer, hvor den nye værdi skal indsættes/erstattes, efterfulgt af værdien, der skal indsættes/erstattes.

Vi kan også indsætte/erstatte flere nøgle/værdi-par, hvis det kræves.

Syntaks

Det fungerer sådan her:

json_set(json, path1, value1, path2, value2...)

Hvor json repræsenterer den originale JSON og path1, value1, path2, value2... er sti/værdi-par, som vi kan bruge til at indsætte nye værdier i JSON-dokumentet (eller erstatte alt efter tilfældet).

Eksempel

Her er et grundlæggende eksempel for at demonstrere:

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

Resultat:

{"a":1,"b":2}

Her indsatte jeg et nyt nøgle/værdi-par ("b":2 ) ind i JSON-dokumentet.

Vi kan indsætte flere nøgle/værdi-par som dette:

SELECT json_set('{ "a" : 1 }', '$.b', 2, '$.c', 3 );

Resultat:

{"a":1,"b":2,"c":3}

Jeg tilføjede simpelthen flere nøgle/værdi-argumenter, da jeg kaldte json_set() .

Erstat værdier

Hvis nøglen allerede eksisterer, erstattes dens værdi med den nye værdi:

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

Resultat:

{"a":1,"b":3}

Dette er hovedforskellen mellem json_set() og json_insert() . json_insert() Funktionen indsætter ikke værdien, hvis nøglen allerede findes.

En anden måde at erstatte værdier på er at bruge json_replace() .

Indsæt et objekt

Her er et eksempel på indsættelse af et JSON-objekt:

SELECT json_set('{ "a" : 1 }', '$.b', json('{ "c" : 2 }') );

Resultat:

{"a":1,"b":{"c":2}}

I dette tilfælde brugte jeg json() funktion for at returnere mit argument som en JSON-streng. Her er, hvad der sker, når jeg ikke gør det:

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

Resultat:

{"a":1,"b":"{ \"c\" : 2 }"}

JSON-dokumentet indsættes som en tekstværdi i stedet for et JSON-objekt, og dets dobbelte anførselstegn undgås derfor med omvendte skråstreg.

Men blot at fjerne de enkelte anførselstegn resulterer i en fejl:

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

Resultat:

Parse error: unrecognized token: "{"
  SELECT json_set('{ "a" : 1 }', '$.b', { "c" : 2 } );
                          error here ---^

Uden enkelte anførselstegn eller json() funktion, får vi en fejl, så snart den støder på den venstre krøllede bøjle.

En anden måde at indsætte et JSON-objekt på er at bruge json_object() funktion i stedet for json() funktion:

SELECT json_set('{ "a" : 1 }', '$.b', json_object('c', 2) );

Resultat:

{"a":1,"b":{"c":2}}

Indsæt et array

Det er en lignende ting, når du indsætter arrays:

SELECT json_set('{ "a" : 1 }', '$.b', json('[ 2, 3, 4 ]'));

Resultat:

{"a":1,"b":[2,3,4]}

Hvis vi fjerner json() funktion, får vi dette:

SELECT json_set('{ "a" : 1 }', '$.b', '[ 2, 3, 4 ]');

Resultat:

{"a":1,"b":"[ 2, 3, 4 ]"}

Og hvis vi fjerner de enkelte anførselstegn, får vi en fejlmeddelelse:

SELECT json_set('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]);

Resultat:

Parse error: no such column:  2, 3, 4 
  SELECT json_set('{ "a" : 1 }', '$.b', [ 2, 3, 4 ]);
                          error here ---^

Vi kan alternativt bruge json_array() funktion i stedet for json() . Denne funktion giver dig mulighed for at oprette et array baseret på dets argumenter:

SELECT json_set('{ "a" : 1 }', '$.b', json_array( 2, 3, 4 ) );

Resultat:

{"a":1,"b":[2,3,4]}

Tilføj værdier til slutningen af ​​et array

Vi kan bruge json_set() at tilføje værdier til slutningen af ​​et array.

For at gøre dette skal du bruge et array-indeks på [#] :

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

Resultat:

[1,2,3,4]

Det samme princip gælder for indlejrede arrays:

SELECT json_set('[ 1, [ "a", "b" ], 3 ]', '$[1][#]', "c" );

Resultat:

[1,["a","b","c"],3]

Erstat array-elementer

Vi kan bruge json_set() for at erstatte elementer i arrayet:

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

Resultat:

[1,4,3]

Arrays er nul-baserede, og så [1] angiver det andet array-element.

json_replace() funktion kan også bruges til at erstatte eksisterende elementer. Igen, dette er anderledes end json_insert() , som ikke erstatter eksisterende elementer.

Ugyldige stier

Vi får en fejl, hvis vores vej ikke er veludformet:

SELECT json_set('{ "a" : 1 }', 'b', 2);

Resultat:

Runtime error: JSON path error near 'b'

I dette tilfælde glemte jeg at inkludere $. forrest på stien.

Ugyldige JSON-dokumenter

Vi får også en fejl, JSON er ikke veludformet:

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

Resultat:

Runtime error: malformed JSON

Denne gang fortæller fejlen os, at vores JSON er forkert udformet.


  1. 7 måder at finde duplikerede rækker i SQL Server, mens du ignorerer enhver primær nøgle

  2. Er PL/SQL-variabler i markører effektivt det samme som bindeparametre?

  3. Få adgang til webservice fra Oracles lagrede procedure

  4. Tilføj førende og efterfølgende nuller i SQL Server