2015-10-30 12 views
8

SQLite ora ha un'estensione JSON1 sperimentale per lavorare con i campi JSON. Le funzioni tra cui scegliere sembrano promettenti, ma non capisco come usarle nel contesto di una query.SQLite Esempio JSON1 per estratto JSON set

Supponiamo che ho creato la seguente tabella:

sqlite> create table user(name,phone); 
sqlite> insert into user values('oz', json_array(['+491765','+498973'])); 

La documentazione mostra come utilizzare json_each in una query, ma tutte le altre funzioni manca un po 'nella documentazione contesto.

Può qualcuno con esperienza SQLite forniscono alcuni esempi di come utilizzare:

  • json_extract
  • json_set

risposta

15

Quindi, ecco un primo esempio di come utilizzare json_extract. In primo luogo, i dati sono un po 'inserito in un modo diverso:

insert into user (name, phone) values("oz", json('{"cell":"+491765", "home":"+498973"}')); 

Ora, siamo in grado di selezionare tutti i numeri di utenti di telefonia come in SQL normale:

sqlite> select user.phone from user where user.name=='oz'; 
{"cell":"+491765","home":"+498973"} 
sqlite> 

Ma, che cosa se non lo facciamo prendersi cura delle linee di terra e vogliamo solo i telefoni cellulari?
Inserire json_extract:

sqlite> select json_extract(user.phone, '$.cell') from user; 
+491765 

E questo è come utilizzare json_extract.

L'utilizzo di json_set è simile. Dato che vogliamo aggiornare il telefono cellulare:

sqlite> select json_set(json(user.phone), '$.cell', 123) from \ 
     user; 
{"cell":123,"home":"+498973"} 

È possibile combinare tali chiamate di funzione in altre query SQL. Pertanto, è possibile utilizzare SQLite con dati strutturati e dati non strutturati sotto forma di JSON.

Ecco come aggiornare solo il telefono cellulare dell'utente:

sqlite> update user 
    ...> set phone =(select json_set(json(user.phone), '$.cell', 721) from user) 
    ...> where name == 'oz'; 
sqlite> select * from user; 
oz|{"cell":721,"home":"+498973"} 
+0

C'è un modo che si può fare una dichiarazione prescelta sulla base di un valore nel campo JSON? –

+0

qualcosa come select json_extract (user.phone, '$ .cell = 491765') dall'utente; –