2011-01-18 10 views
26

dicen nuestros datos JSON proviene de una sola tabla de MySQL:¿Bibliotecas Javascript que permiten consultas tipo SQL en datos JSON?

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

Y dicen que el pseudo-código es:

"conseguir todos los objetos de toda persona sex:F de income> 60000`".

¿Hay alguna biblioteca javascript que permita codificar tales consultas en estos datos JSON utilizando una sintaxis similar a SQL o SQL.

En caso de que son curiosos, un poco de contexto:

estoy haciendo el front-end de un servicio web de análisis de datos para mi organización sin saber cuál será el futuro de back-end. En el futuro migrarán sus datos de las tablas de MS Access a algún tipo de base de datos de tipo MySQL. Hasta entonces estoy usando archivos JSON estáticos para comenzar el desarrollo y pensé que podría ser útil para ellos en el futuro que mis consultas javascript aparezcan como consultas MySQL. (No se puede acceder a la base de datos actual de MS Access desde la web.)

Respuesta

12

Salida 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

Puede que esté interesado en echar un vistazo a MongoDB, un almacén de datos al estilo JSON con todas las posibilidades. Aquí es su query syntax:

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

Para su ejemplo de pregunta:

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

buena sugerencia en general, pero una mala respuesta a esta pregunta en mi humilde opinión – Kristian

1

También hay JsonSql que parece ser similar como lo que eres buscando. El único problema es que no se ha actualizado en 30/12/2007. Aún así, el código está ahí para agarrar y jugar.

1

Según los navegadores/versiones que deba admitir, me esforzaré por utilizar HTML5 client-side SQL, insertando mis datos JSON en una o más tablas y aprovechando la potencia de las consultas SQL reales.

Aquí está el proyecto de especificaciones: http://www.w3.org/TR/webdatabase/

+0

... Gracias por su respuesta que han empezado a investigar IndexDB , una base de datos del lado del cliente para Firefox 4. https://developer.mozilla.org/en/IndexedDB/IndexedDB_primer –

7

I usa Taffydb. TaffyDB es una biblioteca opensouce que trae características de la base de datos en sus aplicaciones de JavaScript. http://taffydb.com/

+1

Recientemente comenzamos a usar TaffyDB en el desarrollo de nuestra aplicación web y se ha simplificado enormemente muchas de las cosas que estamos haciendo. Hay un par de puntos sobre los que es extraño, pero en general es bastante mágico. :) –

1

Sé que la pregunta es antigua, pero acabo de llegar aquí a través de una búsqueda en Google. Solo estoy siguiendo una charla sobre objeq. Parece bastante prometedor y mucho de lo que estás buscando.

6

Puede intentar alasql.js. Es un servidor SQL puro del lado del cliente de JavaScript, donde puede realizar consultas sobre los objetos 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])); 

Prueba esto en 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>

Cuestiones relacionadas