Javascript 如何使用这个JSON响应文件进行迭代
如上所述,我不知道如何使用服务器端php中的这种JSON响应,这是我通过使用以下代码Javascript 如何使用这个JSON响应文件进行迭代,javascript,php,html,json,Javascript,Php,Html,Json,如上所述,我不知道如何使用服务器端php中的这种JSON响应,这是我通过使用以下代码echo JSON_encode(array_merge($outp,$outp2))得到的 如果我在客户端javascript中使用此代码 if (this.readyState == 4 && this.status == 200) { students = JSON.parse(this.responseText); students.forEach(function(ite
echo JSON_encode(array_merge($outp,$outp2))得到的代码>
如果我在客户端javascript中使用此代码
if (this.readyState == 4 && this.status == 200) {
students = JSON.parse(this.responseText);
students.forEach(function(item){
console.log(item.stuid);
x = item.stuid;
document.getElementById("demo").innerHTML += x + " " + item.stuname + "<br>" + item.cname + "<br>";
});
}
不知何故,我可以迭代stuid
和stuame
,但它不允许它们将cname
作为数组包含在一起
我怎样才能把它变成这样:-
12 Velino Meratis
InfoTech000, InfoTech001, C101
13 Alana Melker
CE000, CE001, C101
有人能帮忙解释一下吗?您可以检查数组是否包含密钥,这样您就不会出现“未定义”错误
你可以这样做
if(item.hasOwnProperty('cname'))
{
console.log(item.cname);
}
您也可以将其用于stuname或其他键。您需要通过唯一ID合并数组中的student
对象。一种方法是将新的stuid
s添加到数组中,并将其与具有相同stuid
的后续项合并。一旦你有了一系列独特的学生,你就可以继续其他目标了
if (this.readyState == 4 && this.status == 200) {
var students_raw = JSON.parse(this.responseText);
var students = [];
students_raw.forEach(function(item){
var existing = students.find($item => item.stuid === $item.stuid);
if (existing) {
existing = Object.assign({}, existing, item);
} else {
students.push(item);
}
});
// your print loop
students.forEach(function(item) {
var x = item.stuid;
document.getElementById("demo").innerHTML += x + " " + item.stuname + "<br>" + item.cname + "<br>";
});
}
if(this.readyState==4&&this.status==200){
var students_raw=JSON.parse(this.responseText);
var学生=[];
学生(功能(项目){
var existing=students.find($item=>item.stuid===$item.stuid);
如果(现有){
existing=Object.assign({},existing,item);
}否则{
学生。推(项);
}
});
//你的打印循环
students.forEach(功能(项目){
var x=item.stuid;
document.getElementById(“demo”).innerHTML+=x+“”+item.stuname+“
”+item.cname+“
”;
});
}
请注意:和未得到广泛支持。您可能需要多填充这些方法注意:此答案假设您愿意并且能够更改来自PHP的数据
值得称赞的是,这是@Magnus Eriksson评论的延伸
最好保持相关数据相互关联。对于格式良好的数据,您应该具有更好的灵活性。理想情况下,您应该在服务器端执行此操作,并将数据呈现给已格式化的客户端
您应该尝试并实现与以下类似的输出:
[{
"stuid": "12",
"stuname": "Velino Meratis",
"stucourse": "BSIT",
"stustat": "0",
"stulyear": "4",
"stulog": "feb 16 2017",
"classes": [{
"cname": "InfoTech000",
"clog": "1"
}, {
"cname": "InfoTech001",
"clog": "2"
}, {
"cname": "C101",
"clog": "3"
}]
}, {
"stuid": "13",
"stuname": "Alana Melker",
"stucourse": "BSCE",
"stustat": "1",
"stulyear": "5",
"stulog": "feb 16 2017",
"classes": [{
"cname": "CE000",
"clog": "4"
}, {
"cname": "CE001",
"clog": "5"
}, {
"cname": "C101",
"clog": "6"
}]
}];
注意我使用了类作为属性名称,因为我们似乎正在处理课程及其类
您的javascript现在看起来像:
if (this.readyState == 4 && this.status == 200) {
students = JSON.parse(this.responseText);
students.forEach(function(item){
console.log(item.stuid);
x = item.stuid;
document.getElementById("demo").innerHTML += x + " " + item.stuname + "<br>" + item.classes.map(function(elem){
return elem.cname;}).join(",") + "<br>";
});
}
您也可以这样尝试一次
HTML
<div id="result"></div>
脚本
var dataJSON = [
{
"stuid":"12",
"stuname":"Velino Meratis",
"stucourse":"BSIT",
"stustat":"0",
"stulyear":"4",
"stulog":"feb 16 2017"
},
{
"stuid":"13",
"stuname":"Alana Melker",
"stucourse":"BSCE",
"stustat":"1",
"stulyear":"5",
"stulog":"feb 16 2017"
},
{
"stuid":"12",
"cname":"InfoTech000",
"clog":"1"
},
{
"stuid":"12",
"cname":"InfoTech001",
"clog":"2"
},
{
"stuid":"12",
"cname":"C101",
"clog":"3"
},
{
"stuid":"13",
"cname":"CE000",
"clog":"4"
},
{
"stuid":"13",
"cname":"CE001",
"clog":"5"
},
{
"stuid":"13",
"cname":"C101",
"clog":"6"
}
] ;
var arr = {};
for(var i = 0 ; i< dataJSON.length ; i++){
var ele = dataJSON[i];
if(arr[ ele.stuid ]==undefined){
arr[ ele.stuid ] = {};
}
arr[ ele.stuid ]['stuid'] = ele.stuid;
if(ele.stuname!=undefined){
arr[ ele.stuid ]['stuname'] = ele.stuname;
}
if(arr[ ele.stuid ]['cname'] == undefined){
arr[ ele.stuid ]['cname'] = [];
}
if(ele.cname!=undefined){
arr[ ele.stuid ]['cname'].push(ele.cname);
}
}
var str = '';
for(var key in arr){
var obj = arr[key];
str += obj['stuid'] +" "+obj['stuname']+'<br/>';
str += obj['cname'].toString()+'<br/>';
}
document.getElementById("result").innerHTML = str;
var-dataJSON=[
{
“stuid”:“12”,
“stuname”:“Velino Meratis”,
“stucourse”:“BSIT”,
“stustat”:“0”,
“stulyear”:“4”,
“stulog”:“2017年2月16日”
},
{
“stuid”:“13”,
“绝技”:“Alana Melker”,
“stucourse”:“理学学士”,
“stustat”:“1”,
“stulyear”:“5”,
“stulog”:“2017年2月16日”
},
{
“stuid”:“12”,
“cname”:“InfoTech000”,
“阻塞”:“1”
},
{
“stuid”:“12”,
“cname”:“InfoTech001”,
“阻塞”:“2”
},
{
“stuid”:“12”,
“cname”:“C101”,
“阻塞”:“3”
},
{
“stuid”:“13”,
“cname”:“CE000”,
“阻塞”:“4”
},
{
“stuid”:“13”,
“cname”:“CE001”,
“阻塞”:“5”
},
{
“stuid”:“13”,
“cname”:“C101”,
“阻塞”:“6”
}
] ;
var arr={};
for(var i=0;i ;
str+=obj['cname'].toString()+'
';
}
document.getElementById(“结果”).innerHTML=str;
谢谢,如您所见,所有项目都没有您尝试使用的所有参数。是stuid
不够还是什么?您尝试在数组中的每个对象上使用cname
和stuame
。如果您查看json数据,所有对象都没有这两个属性(实际上没有一个对象同时具有这两个属性),因此当它们不存在时,尝试使用它们会给您带来“未定义”的结果。json从何而来?如果您是自己创建的,我建议您使用更好的数据结构。我是说,你应该为每个学生构建一个对象,包含所有连接到该学生的数据。如果属性可以有多个值,请将其设置为具有这些值的数组。还要确保所有学生对象都具有相同的属性集。对不起,杜德,但它仅限于具有stuname
的前两个对象,否则它会被证明是未定义的:/对“stuname”也使用相同的解决方案。
<div id="result"></div>
var dataJSON = [
{
"stuid":"12",
"stuname":"Velino Meratis",
"stucourse":"BSIT",
"stustat":"0",
"stulyear":"4",
"stulog":"feb 16 2017"
},
{
"stuid":"13",
"stuname":"Alana Melker",
"stucourse":"BSCE",
"stustat":"1",
"stulyear":"5",
"stulog":"feb 16 2017"
},
{
"stuid":"12",
"cname":"InfoTech000",
"clog":"1"
},
{
"stuid":"12",
"cname":"InfoTech001",
"clog":"2"
},
{
"stuid":"12",
"cname":"C101",
"clog":"3"
},
{
"stuid":"13",
"cname":"CE000",
"clog":"4"
},
{
"stuid":"13",
"cname":"CE001",
"clog":"5"
},
{
"stuid":"13",
"cname":"C101",
"clog":"6"
}
] ;
var arr = {};
for(var i = 0 ; i< dataJSON.length ; i++){
var ele = dataJSON[i];
if(arr[ ele.stuid ]==undefined){
arr[ ele.stuid ] = {};
}
arr[ ele.stuid ]['stuid'] = ele.stuid;
if(ele.stuname!=undefined){
arr[ ele.stuid ]['stuname'] = ele.stuname;
}
if(arr[ ele.stuid ]['cname'] == undefined){
arr[ ele.stuid ]['cname'] = [];
}
if(ele.cname!=undefined){
arr[ ele.stuid ]['cname'].push(ele.cname);
}
}
var str = '';
for(var key in arr){
var obj = arr[key];
str += obj['stuid'] +" "+obj['stuname']+'<br/>';
str += obj['cname'].toString()+'<br/>';
}
document.getElementById("result").innerHTML = str;