【问题标题】:JSON file showing only last entry though ids are differentJSON 文件仅显示最后一个条目,但 ID 不同
【发布时间】:2014-07-06 23:05:23
【问题描述】:

我的 json 文件如下所示:

var obj = {
 Dilse : {"name":"Dil Se Re","length":"5:40","songType":"Romantic"},
 Dilse : {"name":"Jiya Jale","length":"3:50","songType":"Self Description"},
 Dilse : {"name":"Chaiyya Chaiyya","length":"4:30","songType":"Masti"},

 Rockstar : {"name":"Sadda haq","length":"5:40","songType":"Romantic"},
 Rockstar : {"name":"Tum ho Pas Mere","length":"3:50","songType":"Self Description"},
 Rockstar : {"name":"Sheher me","length":"4:30","songType":"Masti"},
}

我想在单击 Dil se 时检索 Dilse 条目,并在单击 Rockstar 时检索 Rockstar 条目。我的页面上已经有 Dilse 和 Rockstar 条目。

JS 函数如下所示:

function dilSe(){

            document.getElementById("div0").innerHTML = ""; var k =0;
            if(xhr.readyState==4){
            if(xhr.status==200){
                var data=xhr.responseText;
                var arr=eval(data);
                for(var i=0;i<3;i++){             //I dont know if I should itearte like this !?

                            var link=document.createElement('a');
                            link.id='name1'+k++;
                            link.innerHTML="Song Name: " +obj.Dilse.name+"<br/>"+"Song Length: "+obj.Dilse.length+"<br/>"+"Song Type: "+obj.Dilse.songType+"<br/><br/>";
                            console.log("link.id is "+link.id);
                            link.setAttribute('href','#');

                            link.addEventListener('click',albums[link.id]);

                            div0.appendChild(link);
                            } 
                }else{
                    div0.innerHTML="Oops, error in communication!";
                    div0.style.color="red";
                }
            }
}


function rockStar(){

            document.getElementById("div0").innerHTML = ""; var k =0; var r=3;
            if(xhr.readyState==4){
            if(xhr.status==200){
                var data=xhr.responseText;
                var arr=eval(data);
                for(var i=0;i<3;i++){       //I dont know if I should itearte like this !?

                            var link=document.createElement('a');
                            link.id='name2'+k++;
                            link.innerHTML="Song Name: " +obj.Rockstar.name+"<br/>"+"Song Length: "+obj.Rockstar.length+"<br/>"+"Song Type: "+obj.Rockstar.songType+"<br/><br/>";
                            console.log("link.id is "+link.id);
                            link.setAttribute('href','#');
                            console.log("obj.rockstar.name is "+obj.Rockstar.name);
                            link.addEventListener('click',albums[link.id]);

                            div0.appendChild(link);
                            } 
                }else{
                    div0.innerHTML="Oops, error in communication!";
                    div0.style.color="red";
                }
            }
}

但最后我得到的是 Dilse 的最后一个条目(即 Chaiyya Chaiyya)和 Rockstar 的最后一个条目(即 Sheher me)。我想显示所有三个条目。

【问题讨论】:

    标签: javascript json


    【解决方案1】:

    您的 JSON 对象不正确。您显然不能使用同一个键有多个条目(您正在做的是告诉 JS:“詹姆斯是这个人。啊不,詹姆斯是另一个人。啊不,詹姆斯是第三个人”。当然,他记得只有最后一个。

    您需要使用数组。最简单的解决方案是将您的 JSON 修改为如下所示:

    var obj = {
     Dilse :
     [
        {"name":"Dil Se Re","length":"5:40","songType":"Romantic"},
        {"name":"Jiya Jale","length":"3:50","songType":"Self Description"},
        {"name":"Chaiyya Chaiyya","length":"4:30","songType":"Masti"},
     ],
    
     Rockstar :
     [
        {"name":"Sadda haq","length":"5:40","songType":"Romantic"},
        {"name":"Tum ho Pas Mere","length":"3:50","songType":"Self Description"},
        {"name":"Sheher me","length":"4:30","songType":"Masti"},
     ],
    }
    

    还有其他可能的选项,例如单个数组(非关联数组),以前的键是每个对象内的值之一,但这需要您遍历整个数组以找到您想要的东西.

    【讨论】:

    • 感谢您的回答。如果我必须显示 Dilse 或 Rockstar 的所有三个条目,你能告诉我如何迭代我的函数吗?以及如何在函数中使用 obj.Dilse.name/length/songType 来获取所有 3 个条目?
    • var list = obj.Dilse; for (var i = 0 ; i &lt; list.length; i++) { dowatheverwith(list[i].name) }
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-01
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 1970-01-01
    相关资源
    最近更新 更多