使用Ajax调用Javascript中的组JSON

使用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

我试图对调用Ajax时得到的JSON对象进行分组,以便稍后在可靠的下拉列表中实现它。我尝试按CI对值进行分组,但它所做的只是将所有值的每个字符拆分:/I尝试了。groupByfor loops,但似乎没有任何效果。 该调用现在只是为了测试我是否能够按照自己的意愿分割文件,以便以后处理:

 $('#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-.-简直不敢相信我忘了:/谢谢你的帮助,效果很好