Javascript jQuery:如何从JSON计算结果

Javascript jQuery:如何从JSON计算结果,javascript,jquery,Javascript,Jquery,我正在为一个项目返回一个JSON数组。下面是响应的样子: {"data":[{"DT_RowId":"row_60","contacts":{"first_name":"Screech","last_name":"Powers"},"users_todos":{"text":"whowho","due_date":"Wed, Feb 6 2019","company_id":"1","location_id":"15","assigned_to_user_id":"21","assigned_t

我正在为一个项目返回一个JSON数组。下面是响应的样子:

{"data":[{"DT_RowId":"row_60","contacts":{"first_name":"Screech","last_name":"Powers"},"users_todos":{"text":"whowho","due_date":"Wed, Feb 6 2019","company_id":"1","location_id":"15","assigned_to_user_id":"21","assigned_to_contact_id":"4258","inserted_by_user_id":"15","status_id":"0"}}],"options":[],"files":[]}


data: [{DT_RowId: "row_60", contacts: {first_name: "Screech", last_name: 
     "Powers"},…}]
   0: {DT_RowId: "row_60", contacts: {first_name: "Screech", last_name: 
     "Powers"},…}
      DT_RowId: "row_60"
      contacts: {first_name: "Screech", last_name: "Powers"}
           first_name: "Screech"
           last_name: "Powers"
      users_todos: {text: "whowho", due_date: "Wed, Feb 6 2019", company_id: 
       "1", location_id: "15",…}
            assigned_to_contact_id: "4258"
            assigned_to_user_id: "21"
            company_id: "1"
            due_date: "Wed, Feb 6 2019"
            inserted_by_user_id: "15"
            location_id: "15"
            status_id: "0"
            text: "whowho"
   files: []
   options: []
我试图返回一个函数,该函数将计算有多少结果具有用户\u todos->status\u id='value',然后将其放入页面其他位置的标签中

以下是我目前掌握的情况:

function count_category(category, json) {

var count= 0;
$.each(json, function (k , v) {
    if (v['users_todos']['status_id'] === category) {
        count++;
    }
});

return count;

};

$('.user_todos_incomplete_count').text('(' + count_category('0', json['data']) + ')');

$('#user_todos_in_progress_count').text('(' + count_category('1', json['data']) + ')');

$('#user_todos_complete_count').text('(' + count_category('2', json['data']) + ')');

$('#user_todos_disregarded_count').text('(' + count_category('3', json['data']) + ')');

我当前得到的所有_计数值的计数为0。似乎我缺少从JSON响应中检测status_id值的正确方法

假设您首先将JSON解析为JavaScript对象,那么您的代码应该可以工作-它将返回第一次计数的
1
,根据提供的示例数据,这是正确的

只需确保首先使用JSON.parse()导入JSON,否则处理的是字符串,而不是对象

函数计数\类别(类别,json){
var计数=0;
$.each(json,函数(k,v){
如果(v['users\u todos']['status\u id']==类别){
计数++;
}
});
返回计数;
};
var rawjson={“数据”:[{“DT_RowId”:“row_60”,“联系人”:{“first_name”:“Screech”,“last_name”:“Power”},“users_todos”:{“text”:“whowho”,“due_date”:“Wed,2019年2月6日”,“company_id”:“1”,“location_id”:“15”,“assigned_to_user_id”:“21”,“assigned_to_to_contact____id”:“4258”,“inserted_by_by_user_id”:“15”,“status_id”:“0”],“options”[];
var json=json.parse(rawjson);
log('('+count_category('0',json['data'])+));
log('('+count_category('1',json['data'])+));
log('('+count_category('2',json['data'])+));
log('('+count_category('3',json['data'])+))

假设您首先将JSON解析为JavaScript对象,那么您的代码应该可以工作-它将返回第一次计数的
1
,根据提供的示例数据,这是正确的

只需确保首先使用JSON.parse()导入JSON,否则处理的是字符串,而不是对象

函数计数\类别(类别,json){
var计数=0;
$.each(json,函数(k,v){
如果(v['users\u todos']['status\u id']==类别){
计数++;
}
});
返回计数;
};
var rawjson={“数据”:[{“DT_RowId”:“row_60”,“联系人”:{“first_name”:“Screech”,“last_name”:“Power”},“users_todos”:{“text”:“whowho”,“due_date”:“Wed,2019年2月6日”,“company_id”:“1”,“location_id”:“15”,“assigned_to_user_id”:“21”,“assigned_to_to_contact____id”:“4258”,“inserted_by_by_user_id”:“15”,“status_id”:“0”],“options”[];
var json=json.parse(rawjson);
log('('+count_category('0',json['data'])+));
log('('+count_category('1',json['data'])+));
log('('+count_category('2',json['data'])+));
log('('+count_category('3',json['data'])+))

您可以使用数组过滤器方法,该方法将返回匹配元素的数组。然后使用
length
属性获取值

设dt={
“数据”:[{
“DT_RowId”:“第60行”,
“联系人”:{
“名字”:“尖叫”,
“姓氏”:“权力”
},
“用户待办事项”:{
“文本”:“谁”,
“到期日”:“2019年2月6日星期三”,
“公司id”:“1”,
“位置标识”:“15”,
“分配给用户的用户id”:“21”,
“分配给联系人id”:“4258”,
“由用户id插入”:“15”,
状态\u id:“0”
}
}],
“选项”:[],
“文件”:[]
}
函数getCount(cat){
返回dt.data.filter(elem=>elem.users\u todos.status\u id==cat).length
}

log(getCount('0'))
您可以使用数组过滤器方法,该方法将返回匹配元素的数组。然后使用
length
属性获取值

设dt={
“数据”:[{
“DT_RowId”:“第60行”,
“联系人”:{
“名字”:“尖叫”,
“姓氏”:“权力”
},
“用户待办事项”:{
“文本”:“谁”,
“到期日”:“2019年2月6日星期三”,
“公司id”:“1”,
“位置标识”:“15”,
“分配给用户的用户id”:“21”,
“分配给联系人id”:“4258”,
“由用户id插入”:“15”,
状态\u id:“0”
}
}],
“选项”:[],
“文件”:[]
}
函数getCount(cat){
返回dt.data.filter(elem=>elem.users\u todos.status\u id==cat).length
}

console.log(getCount('0'))
好吧,要统计所有有
用户待办事项的行,您需要另一个类似于此的函数:

function count_all(json) {
  return json.filter(function(row) {
    return row.users_todos).length;
  }
}

好的,要计算所有有
user\u todo
的行,您需要另一个类似这样的函数:

function count_all(json) {
  return json.filter(function(row) {
    return row.users_todos).length;
  }
}
A.您只需要迭代“数据”的子项(“选项”和“文件”不在此列)

B.“数据”的子级是一个数组

$.each(json, function (k , v) {
    if (k === 'data' && v[0].users_todos.status_id === category) {
        count++;
    }
});
A.您只需要迭代“数据”的子项(“选项”和“文件”不在此列)

B.“数据”的子级是一个数组

$.each(json, function (k , v) {
    if (k === 'data' && v[0].users_todos.status_id === category) {
        count++;
    }
});

什么是“全部计数”?这是全部还是特定字段的总和?对不起,安迪。我的错误:我不是故意要下划线的。我只是引用了我所有的计数请求。“users\u todos”字段是否在所有行中都存在?还是为空?它在所有行中都存在。谢谢,“全部”算什么?这是全部还是特定字段的总和?对不起,安迪。我的错误:我不是故意要下划线的。我只是引用了我所有的计数请求。“users\u todos”字段是否在所有行中都存在?还是为空?它在所有行中都存在。谢谢。
数据
已经被解析了,因为我相信这只是响应so@Andy如果是这样的话,那么代码应该已经可以工作了,如问题所示。但OP说它不…所以这是我的假设。可以肯定的是,如果您在原始JSON上运行相同的代码而不对其进行解析,那么在OP报告(我测试过)中,所有计数都可以为0。无论如何,对ajax调用的响应是否自动解析为JSON取决于调用时使用的设置和/或服务器返回的头等。这不是保证。这是正确的。我们一定要使用对象螺母,而不是它的字符串表示形式。根据面临的问题,无法简单地计算包含
us的行总数