web-dev-qa-db-ja.com

JSONデータに対するSQLのようなクエリを可能にするJavaScriptライブラリ?

JSONデータが単一のMySQLテーブルからのものであるとします。

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

そして、疑似コードは次のとおりです:

"すべての人物オブジェクトを取得sex:F of income> 60000` "。

SQLまたはSQLに似た構文を使用して、このJSONデータに対してこのようなクエリをコーディングできるJavaScriptライブラリはありますか?.

好奇心が強い場合のために、いくつかのコンテキスト:

私は、将来のバックエンドがどうなるかを知らずに、組織のデータ分析Webサービスのフロントエンドを作成しています。将来的には、データをMS Accessテーブルから何らかのMySQLタイプのデータベースに移行する予定です。それまでは、静的なJSONファイルを使用して開発を開始しており、将来的にはJavaScriptクエリをMySQLクエリとして表示させることが役立つと考えていました。 (現在のMS AccessデータベースはWebから到達できません。)

34
b_dev

チェックアウト 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; });
16
Mike Valenty

alasql.js を試すことができます。これは、JSONオブジェクトに対してクエリを実行できる純粋なJavaScriptクライアント側SQLサーバーです。

   // 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 で試してください

10
agershun

私はTaffydbを使用しています。 TaffyDBは、データベース機能をJavaScriptアプリケーションに組み込むオープンソースライブラリです。 http://taffydb.com/

9
arpo

過去のGoogle検索で、JavaScriptライブラリのようなlinqをいくつか見ました。

編集-ここにカップルです
http://linqjs.codeplex.com/
http://jslinq.codeplex.com/
http://jsinq.codeplex.com/ <- これのための本当にクールな遊び場

4
goat

完全なクエリ機能を備えたJSONスタイルのデータストアであるMongoDBをチェックしてみてください。これが クエリ構文: です

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

あなたの質問例について:

db.users.find({'sex': 'F', 'income' : {$gt : 60000}})
1
Kyle Wild
<!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>
1
jfraber

JsonSql もあり、探しているものと似ているようです。唯一の問題は、2007年12月30日には更新されていないことです。それでもコードは入手して操作するためのものです。

1
Matthew Manela

どのブラウザー/バージョンをサポートする必要があるかに応じて、私は HTML5クライアント側SQL を使用して、JSONデータを1つ以上のテーブルにプッシュし、真のSQLクエリの力を利用しようと努力します。

これがドラフト仕様です: http://www.w3.org/TR/webdatabase/

1
Phrogz

私が好きなJSONPathと呼ばれるXPathスタイルのクエリもあります http://goessner.net/articles/JsonPath/

そして、これがあります http://code.google.com/p/jfunk/ データをフィルタリングするためのjQueryスタイルセレクターのユーザー

1
Daveo

質問が古いことは知っていますが、Google検索でここに来ました。私はちょうど objeq についての話に従っています。非常に有望で、あなたが探しているものにとても似ています。

1
Gregor