2

我正在使用 Json 在客户端(javascript)表示数据,我将 .net 数据表对象转换为 json,现在需要对 Json 数据应用过滤器。我使用 _.where 来应用基本数据过滤器,但需要复杂的过滤,例如:

where = (stundentID = 55 and school='abc') AND (City='xyz' or City ='abc')

它是我们在 Oracle 或 sql server 查询中使用的一种基本过滤类型。现在我如何使用 underscore.js 或 Json 或 javascript 结构上的一些等价物来应用这种机制。我可能还需要在 javascript 中使用聚合 [ Sum(sales)==500] 来查询获取 Top N 记录。等待您的宝贵建议。

谢谢,

4

2 回答 2

4

假设您将此 JSON 表示为常规 JavaScript 对象(毕竟没有 JSON 对象之类的东西),您最好使用linq.js

您将能够执行以下操作:

var studentFilteredArray = 
          Enumerable.From(students)
                    .Where(function(s) { return s.studenId == 55;  })
                    .OrderBy(function(s) { return s.LastName; })
                    .ToArray();

或者从你上面的例子:

.Where(function(s) { 
      return s.studentID === 55 && s.school === 'abc' && (s.City === 'xyz' || s.City === 'abc') 
});
于 2013-01-04T16:21:02.543 回答
0

您也可以尝试alasql.js,您可以在其中使用标准 SQL SELECT WHERE 语句。Alasql 专门设计用于处理 JSON 数组,如数据库中的表。

// Create database and describe the table
var db = new alasql.Database();
db.exec('CREATE TABLE students ([studentID] INT, school STRING, [City] STRING)');

// Assign you array here
db.tables.students.data = [
       {studentID: 55, school: 'abc', City:'abc'},
       {studentID: 56, school: 'klm', City:'xyz'},
       {studentID: 57, school: 'nyz', City:'xyz'}
    ];

// Use regular SQL 
console.log(db.exec("SELECT * FROM students "
  +" WHERE ([studentID] = 55 AND school='abc') AND ([City]='xyz' OR [City] ='abc')"));

在 jsFiddle试试这个例子。

于 2014-10-30T10:08:52.693 回答