如何在 JSON 上应用复杂的数据过滤器,例如 SQL where 子句
Posted
技术标签:
【中文标题】如何在 JSON 上应用复杂的数据过滤器,例如 SQL where 子句【英文标题】:How to apply complex data filters like SQL where clause on JSON 【发布时间】:2012-12-19 02:30:23 【问题描述】:我正在使用 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 记录。等待您的宝贵建议。
谢谢,
【问题讨论】:
查看以下链接以供参考:***.com/questions/4720494/… 【参考方案1】:假设您将此 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')
);
【讨论】:
这是 linq 问题还是 javascript 问题? @Saju - 这是一个 JavaScript 问题。我建议他使用 linq.js 实用程序来完成他想要的。 谢谢,一个不错的解决方案,虽然我有点担心它的性能。 @Adam Rackis:知道 linq.js 的效率有多高吗?与 underscore.js 之类的东西相比 @Adam Rackis:不用担心。为向我介绍它而干杯。【参考方案2】:你也可以试试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')"));
试试这个例子in jsFiddle。
【讨论】:
它看起来也是一个很有前途的选择,我一定会尝试一下。以上是关于如何在 JSON 上应用复杂的数据过滤器,例如 SQL where 子句的主要内容,如果未能解决你的问题,请参考以下文章
如何在 JSON 文件上运行的 GraphQL 上应用过滤器?
仅在子级别上应用 jq 过滤器,保持 JSON 的其余部分完好无损