允许对JSON数据进行类似SQL查询的Javascript库?

时间:2011-01-18 04:30:05

标签: javascript jquery sql mysql json

假设我们的JSON数据来自单个MySQL表:

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

并说伪代码是:

“获取所有sex:F income> 60000`”的所有人物对象。

是否有任何javascript库允许用户使用类似SQL或SQL的语法对此JSON数据进行此类查询编码。

如果您感到好奇,可以使用一些上下文:

我正在为我的组织制作数据分析Web服务的前端,而不知道未来的后端是什么。将来,他们会将数据从MS Access表迁移到某种MySQL类型的数据库。在那之前,我使用静态JSON文件来开始开发,并且认为将来我们的javascript查询显示为MySQL查询可能对他们有所帮助。 (无法从Web访问当前的MS Access数据库。)

10 个答案:

答案 0 :(得分:15)

结帐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 :(得分:9)

我使用Taffydb。 TaffyDB是一个开源库,可以将数据库功能引入JavaScript应用程序。 http://taffydb.com/

答案 2 :(得分:9)

您可以尝试alasql.js。它是纯JavaScript客户端SQL服务器,您可以在其中对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]));

Fiddle

中试试

答案 3 :(得分:4)

我在过去的谷歌搜索中看到了一些类似于jq库的linq。

编辑 - 这是一对夫妇 http://linqjs.codeplex.com/
http://jslinq.codeplex.com/
http://jsinq.codeplex.com/< - really cool playground for this one

答案 4 :(得分:1)

您可能有兴趣查看具有完全可查询性的JSON样式数据存储MongoDB。这是query syntax:

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

对于您的示例问题:

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

答案 5 :(得分:1)

还有JsonSql似乎与您正在寻找的相似。唯一的问题是它在2007年12月30日尚未更新。仍然有代码可以抓住并玩。

答案 6 :(得分:1)

根据您必须支持的浏览器/版本,我会努力使用HTML5 client-side SQL,将我的JSON数据推送到一个或多个表中,并利用真正的SQL查询的强大功能。

以下是草案规范:http://www.w3.org/TR/webdatabase/

答案 7 :(得分:1)

还有一个名为JSONPath的XPath样式查询,我喜欢http://goessner.net/articles/JsonPath/

还有http://code.google.com/p/jfunk/ 哪些用户使用jQuery样式选择器来过滤数据

答案 8 :(得分:1)

我知道问题已经过时了,但我刚刚通过Google搜索来到这里。我只是在谈论objeq。看起来非常有前途,非常适合你所寻找的东西。

答案 9 :(得分:1)

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.3.min.js"></script>
	<script type="text/javascript" src="linq.js"></script>
	<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);
	</script>
</head>
<body>


</body>
</html>