sql >> Database >  >> RDS >> SQLite

SQLite JSON_INSERT()

De SQLite json_insert() functie stelt ons in staat om een ​​nieuwe waarde in een JSON-document in te voegen.

We geven de originele JSON door als het eerste argument wanneer we de functie aanroepen, gevolgd door een pad dat aangeeft waar de nieuwe waarde moet worden ingevoegd, gevolgd door de in te voegen waarde.

We kunnen indien nodig ook meerdere sleutel/waarde-paren invoegen.

Syntaxis

De functie wordt als volgt aangeroepen:

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

Waar json staat voor de originele JSON, en path1, value1, path2, value2... zijn pad/waarde-paren die we kunnen gebruiken om nieuwe waarden in het JSON-document in te voegen.

Voorbeeld

Hier is een eenvoudig voorbeeld om te demonstreren:

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

Resultaat:

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

Hier heb ik een nieuw sleutel/waarde-paar ingevoegd ("b":2 ) in het JSON-document.

We kunnen meerdere sleutel/waarde-paren als volgt invoegen:

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

Resultaat:

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

Ik heb gewoon meer sleutel/waarde-argumenten toegevoegd toen ik json_insert() . aanriep .

Sleutel/waarde bestaat al?

De json_insert() functie zal de waarde niet invoegen als de sleutel al bestaat:

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

Resultaat:

{"a":1}

In dit geval is de sleutel a bestaat al in de JSON, dus proberen een nieuwe waarde voor die sleutel in te voegen werkt niet.

Om een ​​waarde te vervangen, gebruikt u ofwel json_replace() of json_set() .

Een object invoegen

Hier is een voorbeeld van het invoegen van een ander JSON-document:

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

Resultaat:

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

In dit geval gebruikte ik de json() functie om mijn argument als een JSON-tekenreeks te retourneren. Dit is wat er gebeurt als ik dat niet doe:

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

Resultaat:

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

Het JSON-document wordt ingevoegd als een tekstwaarde in plaats van een JSON-object, en de dubbele aanhalingstekens worden daarom met backslashes geëscaped.

Dit is wel eerlijk genoeg. We hebben de nieuwe waarde immers tussen enkele aanhalingstekens geplaatst. Hoe wist SQLite of we een string of een JSON-object wilden invoegen?

En het is niet zo dat we die enkele aanhalingstekens zomaar kunnen verwijderen:

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

Resultaat:

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

Zonder enkele aanhalingstekens of de json() functie krijgen we een foutmelding zodra deze de linker accolade tegenkomt.

Een andere manier om een ​​JSON-object in te voegen is door de json_object() functie in plaats van de json() functie:

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

Resultaat:

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

Een array invoegen

Hetzelfde geldt voor het invoegen van arrays:

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

Resultaat:

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

Als we de json() . verwijderen functie krijgen we dit:

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

Resultaat:

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

En als we de enkele aanhalingstekens verwijderen, krijgen we een foutmelding:

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

Resultaat:

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

We kunnen ook de json_array() . gebruiken functie in plaats van json() . Met die functie kun je een array maken op basis van zijn argumenten:

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

Resultaat:

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

Waarden aan het einde van een array toevoegen

We kunnen json_insert() . gebruiken om waarden toe te voegen aan het einde van een array.

Gebruik hiervoor een array-index van [#] :

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

Resultaat:

[1,2,3,4]

Hetzelfde principe is van toepassing op geneste arrays:

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

Resultaat:

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

Ongeldige paden

We krijgen een foutmelding als ons pad niet goed is gevormd:

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

Resultaat:

Runtime error: JSON path error near 'b'

In dit geval ben ik vergeten $. aan de voorkant van het pad.

Ongeldige JSON-documenten

We krijgen ook een foutmelding dat de JSON niet goed is gevormd:

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

Resultaat:

Runtime error: malformed JSON

Deze keer vertelt de fout ons dat onze JSON een verkeerde indeling heeft.


  1. Kijk uit voor een tabel met nieuwe records in de sql-database

  2. Hoe een afbeeldingsveld naar een bestand te exporteren?

  3. Wat gebeurt er met de primaire sleutel-ID als deze de limiet overschrijdt?

  4. Bereken het verschil tussen twee datetimes in MySQL