C# 如何在c中从JSON字符串中检索不同对象类型的计数#
我有一个包含数据的单数组json字符串:C# 如何在c中从JSON字符串中检索不同对象类型的计数#,c#,jquery,datatables,C#,Jquery,Datatables,我有一个包含数据的单数组json字符串: [{"Name":"John","Age":"22"}, {"Name":"Jack","Age":"56"}, {"Name":"John","Age":"82"}, {"Name":"Jack","Age":"95"}] 我已经反序列化了数据,并成功地将数据写入jquery数据表。但是,我现在想在datatable中添加一列,以包含john和jack姓名的计数,这些姓名都在一列中。我可以通过在循环中说以下内容来获得单个计数: if (people[
[{"Name":"John","Age":"22"}, {"Name":"Jack","Age":"56"}, {"Name":"John","Age":"82"}, {"Name":"Jack","Age":"95"}]
我已经反序列化了数据,并成功地将数据写入jquery数据表。但是,我现在想在datatable中添加一列,以包含john和jack姓名的计数,这些姓名都在一列中。我可以通过在循环中说以下内容来获得单个计数:
if (people[i].Name == "John")
{
name_count++;
}
if (people[i].Name == "Jack")
{
name_count2++;
}
如何使这些数据显示在与包含jack或john名称的行匹配的一列中?我用的是C#。提前感谢我建议使用下划线.js(http://documentcloud.github.com/underscore). 您可以轻松实现所需的任何类型的map/reduce/select。这里有一个例子:
var people = [{"Name":"John","Age":"22"}, {"Name":"Jack","Age":"56"}, {"Name":"John","Age":"82"}, {"Name":"Jack","Age":"95"}];
var num_johns = _(people).select(function(obj){
return obj.Name === 'John'}).length;
alert(num_johns); //alerts 2
您甚至可以更进一步,用一些curry来计算select函数,这取决于您的具体问题。我建议使用下划线.js(http://documentcloud.github.com/underscore). 您可以轻松实现所需的任何类型的map/reduce/select。这里有一个例子:
var people = [{"Name":"John","Age":"22"}, {"Name":"Jack","Age":"56"}, {"Name":"John","Age":"82"}, {"Name":"Jack","Age":"95"}];
var num_johns = _(people).select(function(obj){
return obj.Name === 'John'}).length;
alert(num_johns); //alerts 2
您甚至可以更进一步,用一些currying来计算select函数,这取决于您的具体问题。您可以对数组进行linq分组
var peeps = from person in people
group person by person.name into bucket
select new { name = bucket.Key, count = bucket.Count() };
这将创建一个具有名称和计数属性的可枚举匿名类型,您可以对其进行迭代以获取名称的名称和计数,例如:
class Guy
{
public int age; public string name;
public Guy( int age, string name ) {
this.age = age;
this.name = name;
}
}
class Program
{
static void Main( string[] args ) {
var GuyArray = new Guy[] {
new Guy(22,"John"),new Guy(25,"John"),new Guy(27,"John"),new Guy(29,"John"),new Guy(12,"Jack"),new Guy(32,"Jack"),new Guy(52,"Jack"),new Guy(100,"Abe")};
var peeps = from f in GuyArray group f by f.name into g select new { name = g.Key, count = g.Count() };
foreach ( var record in peeps ) {
Console.WriteLine( record.name + " : " + record.count );
}
}
}
将发出:
John : 4
Jack : 3
Abe : 1
您可以对数组进行linq分组
var peeps = from person in people
group person by person.name into bucket
select new { name = bucket.Key, count = bucket.Count() };
这将创建一个具有名称和计数属性的可枚举匿名类型,您可以对其进行迭代以获取名称的名称和计数,例如:
class Guy
{
public int age; public string name;
public Guy( int age, string name ) {
this.age = age;
this.name = name;
}
}
class Program
{
static void Main( string[] args ) {
var GuyArray = new Guy[] {
new Guy(22,"John"),new Guy(25,"John"),new Guy(27,"John"),new Guy(29,"John"),new Guy(12,"Jack"),new Guy(32,"Jack"),new Guy(52,"Jack"),new Guy(100,"Abe")};
var peeps = from f in GuyArray group f by f.name into g select new { name = g.Key, count = g.Count() };
foreach ( var record in peeps ) {
Console.WriteLine( record.name + " : " + record.count );
}
}
}
将发出:
John : 4
Jack : 3
Abe : 1
谢谢你的回复。然而,我正在寻找一个c#解决方案。实际上,我有一个程序的副本,它使用客户端代码实现了完整的功能和正确的结果。但是,由于处理量太大,它现在变得非常慢,需要一个C#的替代解决方案。感谢您的回复。然而,我正在寻找一个c#解决方案。实际上,我有一个程序的副本,它使用客户端代码实现了完整的功能和正确的结果。然而,由于处理量很大,它现在变得非常慢,需要一个C#中的替代解决方案。