2011-01-18 7 views
26

dicono i nostri dati JSON proviene da una singola tabella di MySQL:Librerie Javascript che consentono query tipo SQL sui dati JSON?

someJSON = [ { name: 'bill' , sex:'M', income:50000 }, 
       { name: 'sara' , sex:'F', income:100000 }, 
       ... 
       ]; 

E dicono che la pseudo-codice è:

"ottenere tutti gli oggetti persona di tutti sex:F di income> 60000`".

Esistono librerie javascript che consentono di codificare tali query su questi dati JSON utilizzando una sintassi SQL o simile a SQL.

Nel caso siate curiosi, qualche contesto:

sto facendo il front-end di un servizio web di analisi dei dati per la mia organizzazione senza sapere che cosa il futuro backend sarà. In futuro migreranno i loro dati dalle tabelle MS Access a una sorta di database di tipo MySQL. Fino ad allora, sto usando i file JSON statici per iniziare lo sviluppo e pensavo che potrebbe essere utile per loro in futuro avere le mie query javascript come query MySQL. (L'attuale database MS Access non è raggiungibile dal Web.)

risposta

12

Partenza jslinq:

var myList = [ 
      {FirstName:"Chris",LastName:"Pearson"}, 
      {FirstName:"Kate",LastName:"Johnson"}, 
      {FirstName:"Josh",LastName:"Sutherland"}, 
      {FirstName:"John",LastName:"Ronald"}, 
      {FirstName:"Steve",LastName:"Pinkerton"} 
      ]; 

var exampleArray = JSLINQ(myList) 
        .Where(function(item){ return item.FirstName == "Chris"; }) 
        .OrderBy(function(item) { return item.FirstName; }) 
        .Select(function(item){ return item.FirstName; }); 
1

Potresti essere interessato a verificare MongoDB, un archivio dati in stile JSON con piena intercettabilità. Qui è la sua query syntax:

db.users.find({'last_name': 'Smith'}) 

Per esempio, domanda:

db.users.find({'sex': 'F', 'income' : {$gt : 60000}}) 
+0

buon suggerimento in generale, ma la risposta a questa domanda scarsa IMHO – Kristian

1

C'è anche JsonSql che sembra essere simile come quello che sei cercando. L'unico problema è che non è stato aggiornato nel 30/12/2007. Il codice è ancora lì per afferrare e giocare.

1

A seconda dei browser/versioni che è necessario supportare, mi piacerebbe utilizzare HTML5 client-side SQL, spingendo i miei dati JSON in una o più tabelle e sfruttando la potenza delle vere query SQL.

Ecco il progetto specifica: http://www.w3.org/TR/webdatabase/

+0

Grazie ... a causa della vostra risposta che hanno iniziato alla ricerca IndexDB , un database lato client per Firefox 4. https://developer.mozilla.org/en/IndexedDB/IndexedDB_primer –

7

I usa Taffydb. TaffyDB è una libreria opensouce che porta funzionalità di database nelle tue applicazioni JavaScript. http://taffydb.com/

+1

Abbiamo recentemente iniziato a utilizzare TaffyDB nel nostro sviluppo di app Web e ha notevolmente semplificato molte delle cose che stiamo facendo. Ci sono un paio di punti che è strano, ma nel complesso è piuttosto magico. :) –

1

So che la domanda è vecchia ma sono appena arrivato tramite una ricerca su Google. Sto solo seguendo una conversazione su objeq. Sembra piuttosto promettente e molto quello che stai cercando.

6

Si può provare alasql.js. È puro SQL-server JavaScript sul lato client, in cui è possibile eseguire query su oggetti JSON.

// Fill table with data 
    var data = [ { name: 'bill' , sex:'M', income:50000 }, 
       { name: 'sara' , sex:'F', income:100000 }]; 

    // Do the query 
    console.log(alasql("SELECT * FROM ? WHERE sex='F' AND income > 60000",[data])); 

Prova questo in Fiddle

1

<!DOCTYPE html> 
 
<html> 
 
<head> 
 
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.min.js"></script> 
 
\t <script type="text/javascript" src="linq.js"></script> 
 
\t <script type="text/javascript"> 
 
var jsonArray = [ 
 
    { "user": { "id": 100, "screen_name": "d_linq" }, "text": "to objects" }, 
 
    { "user": { "id": 130, "screen_name": "c_bill" }, "text": "g" }, 
 
    { "user": { "id": 155, "screen_name": "b_mskk" }, "text": "kabushiki kaisha" }, 
 
    { "user": { "id": 301, "screen_name": "a_xbox" }, "text": "halo reach" } 
 
] 
 
// ["b_mskk:kabushiki kaisha", "c_bill:g", "d_linq:to objects"] 
 
var queryResult = Enumerable.From(jsonArray) 
 
    .Where(function (x) { return x.user.id < 200 }) 
 
    .OrderBy(function (x) { return x.user.screen_name }) 
 
    .Select(function (x) { return x.user.screen_name + ':' + x.text }) 
 
    .ToArray(); 
 
// shortcut! string lambda selector 
 
var queryResult2 = Enumerable.From(jsonArray) 
 
    .Where("$.user.id < 200") 
 
    .OrderBy("$.user.screen_name") 
 
    .Select("$.user.screen_name + ':' + $.text") 
 
    .ToArray(); 
 

 
console.log(queryResult); 
 
console.log(queryResult2); 
 
\t </script> 
 
</head> 
 
<body> 
 

 

 
</body> 
 
</html>

Problemi correlati