是否有可能在json数据中有group by?

时间:2012-05-06 07:43:11

标签: jquery asp.net-mvc json

在我的控制器类中,GetGroupedLogReport作为JsonResult我返回一个List 它具有以下属性:名称,州,......

在视图中我需要按名称和状态对这些数据进行分组: 这是代码:

 function SetReportGrid(pageNumber, extra) {
    $("#gvReportList tbody").html('');
    $('#pagination').html('');
    $.getJSON('/Report/GetGroupedLogReport', {
        fromDate: $('#FromDate').val() || "",
        toDate: $('#ToDate').val() || ""


    }, function (data) {
     //here

        }
                       gvReportList.init();
        });
    });

我需要获取json数据并按名称和状态对其进行分组然后将其放入网格中,我该如何对其进行分组?

这里是数据样本:

[Object { Id=563,Name="test",State="test"},{Id=543,Name="test2",State="test2"}]

2 个答案:

答案 0 :(得分:0)

JSON只是一种数据符号,一种结构,它不提供任何类型的查询。实现group by操作的一种方法是迭代每个元素并记住先前的并比较它是否已经改变。

var key;
data.forEach(function(obj) {
   var k = obj.Name + ":" + obj.State;
   if (key !== k) {
       key = k;
       console.log("New group " + key);
   }
   console.log(obj.Id);
});

如果您的数据订购不正确,您可以尝试使用此工具:LINQ to JavaScript,它的灵感来自.NET LINQ。它可以启用selectwhereorder,...

等查询

总而言之,如果您可以在服务器端执行此操作,则可能会获得更好(更快)的结果。

答案 1 :(得分:0)

如果您只需按这两个字段(名称和状态)进行分组,则可以使用Alasql库进行分组。

var data = [{ Id:563,Name:"test",State:"test"},{Id:543,Name:"test2",State:"test2"},
            {Id:544,Name:"test2",State:"test2"}, {Id:545,Name:"test2",State:"test2"}];

var res = alasql('SELECT Name, State FROM ? GROUP BY Name, State',[data]);

在jsFiddle中尝试this example