使用Ajax调用Javascript中的组JSON
我试图对调用Ajax时得到的JSON对象进行分组,以便稍后在可靠的下拉列表中实现它。我尝试按CI对值进行分组,但它所做的只是将所有值的每个字符拆分:/I尝试了。groupBy,for loops,但似乎没有任何效果。 该调用现在只是为了测试我是否能够按照自己的意愿分割文件,以便以后处理:使用Ajax调用Javascript中的组JSON,javascript,jquery,json,ajax,Javascript,Jquery,Json,Ajax,我试图对调用Ajax时得到的JSON对象进行分组,以便稍后在可靠的下拉列表中实现它。我尝试按CI对值进行分组,但它所做的只是将所有值的每个字符拆分:/I尝试了。groupBy,for loops,但似乎没有任何效果。 该调用现在只是为了测试我是否能够按照自己的意愿分割文件,以便以后处理: $('#my_id').on('change', '#CISelect', function(){ $.ajax({ type:'GET', u
$('#my_id').on('change', '#CISelect', function(){
$.ajax({
type:'GET',
url:"{{url_for('CIType')}}",
success:function(data){
console.log(data);
var result = {},
i = 0;
$(data).each(function(key,item){
dataValue = item[i].CI;
if(!result[dataValue]){
result[dataValue] = [];
i++;
}
result[dataValue].push(item[i].CI);
i++;
});
console.log(result);
}
})
我的JSON如下所示:
[{"CI":"GDV","Type":"Backup","TypeValue":20613},
{"CI":"GDV","Type":"Carepack","TypeValue":20642},
{"CI":"UNV","Type":"Digitalkamera","TypeValue":335},
{"CI":"UNV","Type":"Dockingstation","TypeValue":250},
{"CI":"PRT","Type":"Fax","TypeValue":325},
{"CI":"MOB","Type":"GSM Gateway","TypeValue":20648}]
我想要的是:
{GDV : [{"Type":"Backup","TypeValue":20613},
{"Type":"Carepack","TypeValue":20642}],
UNV : [{"Type":"Digitalkamera","TypeValue":335},
{"Type":"Dockingstation","TypeValue":250}],
PRT : [{"Type":"Fax","TypeValue":325}},
MOB : {{"Type":"GSM Gateway","TypeValue":20648}]}
任何帮助都会很好。const raw=[
{CI:“GDV”,类型:“备份”,类型值:20613},
{CI:“GDV”,类型:“Carepack”,类型值:20642},
{CI:“联合国志愿人员”,类型:“Digitalkamera”,类型值:335},
{CI:“联合国志愿人员”,类型:“停靠站”,类型值:250},
{CI:“PRT”,类型:“传真”,类型值:325},
{CI:“移动”,类型:“GSM网关”,类型值:20648}
];
//Distinc CI值
const dist_CI=[…新集合(raw.map(r=>r.CI))];
const result={};
for(让ci在dist_ci中){
结果[ci]=原始
.filter(r=>r.CI==CI)
.map(r=>{
返回{
类型:r.类型,
TypeValue:r.TypeValue
};
});
};
结果:
{
“GDV”:[
{
“类型”:“备份”,
“类型值”:20613
},
{
“类型”:“Carepack”,
“类型值”:20642
}
],
“志愿人员方案”:[
{
“类型”:“Digitalkamera”,
“类型值”:335
},
{
“类型”:“停靠站”,
“类型值”:250
}
],
“PRT”:[
{
“类型”:“传真”,
“类型值”:325
}
],
“暴民”:[
{
“类型”:“GSM网关”,
“类型值”:20648
}
]
}
您需要进行微调
每个迭代器都需要更新
$('#my_id').on('change', '#CISelect', function(){
$.ajax({
type:'GET',
url:"{{url_for('CIType')}}",
success:function(data){
console.log(data);
var result = {},
$.each(data,function(key,item){
let dataValue = item["CI"]
if(!result[dataValue]){
result[dataValue] = [];
result[dataValue].push({Type:item["Type"], TypeValue:item["TypeValue"]});
}else{
result[dataValue].push({Type:item["Type"], TypeValue:item["TypeValue"]});
}
});
console.log(result);
}
})
我的解决方案。。。(更简单…)
let数据=
[{CI:'GDV',Type:'Backup',TypeValue:20613}
,{CI:'PRT',类型:'Fax',类型值:325}
,{CI:'GDV',Type:'Carepack',TypeValue:20642}
,{CI:'UNV',类型:'Digitalkamera',类型值:335}
,{CI:'UNV',类型:'Dockingstation',类型值:250}
,{CI:'MOB',类型:'GSM网关',类型值:20648}
]
结果=数据。减少((acc,elm)=>{
if(acc[elm.CI])acc[elm.CI].push({Type:elm.Type,TypeValue:elm.TypeValue})
else acc[elm.CI]=[{Type:elm.Type,TypeValue:elm.TypeValue}]
返回acc
},{})
console.log(result)
我认为您的代码需要很少的小改动,应该可以正常工作。在第一个if条件内,推送完整的项目,也推送if条件外的项目。检查每个文档,它应该有内部迭代器,这样就不用显式声明i变量了。@KrishnaSingh,你能解释一下应该修复什么吗?ThanksJSON是一种文本格式。一旦从$.ajax
获取数据,它就只是一个对象数组。这可能有助于您在搜索时找到答案。您的初始JSON是否始终按CI
键分组?请回答您的问题,并说明您是如何使用建议的重复问题的答案来尝试解决问题的。可能是您的实现不正确。谢谢您的帮助,但我一直收到一个错误:raw.map不是一个函数。您的浏览器是什么?嗯,那不可能是正确的。如果你在chrome中复制粘贴我的代码,它会工作。您是否试图将其粘贴到ajax成功函数中?如果是,则将“raw”替换为“data”,它应该可以工作(只要模式是您描述的模式)我的JSON和您的JSON之间存在差异,在我的CI中显示为此“CI”和您的CI,我确实用数据更改了raw,这不重要,这只是一个显示差异。第一个解决方案返回了一个错误:未捕获错误:语法错误,无法识别的表达式:尝试使用var声明数据值我也尝试过,但返回了一个错误:data.reduce不是我第一次用数据测试的函数。reduce@AmilaBečirović:也可以尝试let result=JSON.parse(数据).reduce((acc,elm)=>{…
谢谢,我完全忘了使用JSON.parse-.-简直不敢相信我忘了:/谢谢你的帮助,效果很好