javascript - Javascript - 循环一个 json 数组并获取带有键和值的项目
问题描述
已经提出了非常相似的问题,但我找不到我的案例的正确答案。
我试图读取一个 json 数组并将其作为带有按钮的列表输出。
杰森:
xyData = {
"animals": {
"0": [{"name": "Cat", "color": -1, "height": 1}, {"name": "Bear", "color": 0, "height": 2}],
"1": [{"name": "Cow", "color": -1, "height": 2}],
"2": [{"name": "Dog", "color": -1, "height": 1}],
"6": [{"name": "Shark", "color": -1, "height": 1}],
"7": [{"name": "Wale", "color": -1, "height": 4}]
},
"peoples": {
"1": [{"name": "Markus", "color": 0, "height": 2}, {"name": "Josef", "color": 0, "height": 2}],
"3": [{"name": "Liz", "color": 1, "height": 2}],
"4": [{"name": "Jake", "color": 0, "height": 2}],
"5": [{"name": "Gunther", "color": 0, "height": 2}],
"6": [{"name": "Rachel", "color": 1, "height": 2}],
"7": [{"name": "George", "color": 0, "height": 2}],
"8": [{"name": "Sarah", "color": 1, "height": 2}, {"name": "Karina", "color": 1, "height": 2}],
"9": [{"name": "Jack", "color": 0, "height": 2}],
"11": [{"name": "Donald", "color": 0, "height": 2}, {"name": "July", "color": 1, "height": 2}]
}
}
最后我想要一个具有如下属性的按钮列表:
<input type="button" onClick="showAnimal(id, name,color,height);" value="'+name+'">
<input type="button" onClick="showPeople(id, name,color,height);" value="'+name+'">
我的方法是这样的:
function Start(wData) {
document.getElementById("animalsTitle").innerHTML = "";
document.getElementById("animals").innerHTML = "";
document.getElementById("peoplesTitle").innerHTML = "";
document.getElementById("peoples").innerHTML = "";
var Data = JSON.parse(wData);
Object.entries(Data).forEach(([key, value]) => {
//console.log(`${key} `);
if (key == "animals") {
document.getElementById("animalsTitle").innerHTML += "<br>"+key+"";
Object.entries(value).forEach(([key, value]) => {
//console.log(`${key} `);
var animalKey = key;
document.getElementById("animals").innerHTML += "<br>Items: "+key+"";
Object.entries(value).forEach(([key, value]) => {
//console.log(`${key} `);
Object.entries(value).forEach(([key, value]) => {
//console.log(`${key} ${value} `);
if (key === "name") {
var nameValue = value;
}
if (key === "color") {
var colorValue = value;
}
if (key === "height") {
var heightValue = value;
}
if (key === "name") {
document.getElementById("animals").innerHTML += '<br><input type="button" onClick="showAnimal(\''+animalKey+'\',\''+colorValue+'\',\''+heightValue+'\');" value="'+nameValue+'">';
}
});
});
});
} else {
var itemPeopleTitleName;
document.getElementById("peoplesTitle").innerHTML += "<br>"+key+"";
Object.entries(value).forEach(([key, value]) => {
//console.log(`${key} `);
var PeopleKey = key;
document.getElementById("peoples").innerHTML += "<br>Items: "+key+"";
Object.entries(value).forEach(([key, value]) => {
//console.log(`${key} `);
Object.entries(value).forEach(([key, value]) => {
//console.log(`${key} ${value} `);
if (key == "name") {
document.getElementById("peoples").innerHTML += '<br><input type="button" onClick="showPeople(\''+PeopleKey+'\',\''+key+'\',\''+value+'\');" value="'+value+'">';
}
});
});
});
}
});
}
Start(JSON.stringify(xyData));
用一点HTML:
<div id="animalsTitle"></div>
<div id="animals"></div>
<div id="peoplesTitle"></div>
<div id="peoples"></div>
希望有人可以帮助我,这不是太混乱,我认为它有点过分了?!:)
解决方案
解决了。
function Start(wData) {
document.getElementById("animalsTitle").innerHTML = "";
document.getElementById("animals").innerHTML = "";
document.getElementById("peoplesTitle").innerHTML = "";
document.getElementById("peoples").innerHTML = "";
var Data = JSON.parse(wData);
Object.entries(Data).forEach(([key, value]) => {
//console.log(`${key} `);
if (key == "animals") {
document.getElementById("animalsTitle").innerHTML += "<br>" + key + "";
Object.entries(value).forEach(([key, value]) => {
//console.log(`${key} `);
var animalKey = key;
document.getElementById("animals").innerHTML += "<br>Items: " + key + "";
Object.entries(value).forEach(([key, value]) => {
//console.log(`${key} `);
var itemKey = key;
document.getElementById("animals").innerHTML += '<input type="button" onClick="showAnimal(\'' + animalKey + '\',\'' + Data.animals[animalKey][itemKey].color + '\',\'' + Data.animals[animalKey][itemKey].height + '\');" value=\'' + Data.animals[animalKey][itemKey].name + '\'>';
});
});
} else {
var itemPeopleTitleName;
document.getElementById("peoplesTitle").innerHTML += "<br>" + key + "";
Object.entries(value).forEach(([key, value]) => {
//console.log(`${key} `);
var PeopleKey = key;
document.getElementById("peoples").innerHTML += "<br>Items: " + key + "";
Object.entries(value).forEach(([key, value]) => {
//console.log(`${key} `);
var itemPKey = key;
document.getElementById("peoples").innerHTML += '<input type="button" onClick="showAnimal(\'' + PeopleKey + '\',\'' + Data.peoples[PeopleKey][itemPKey].color + '\',\'' + Data.peoples[PeopleKey][itemPKey].height + '\');" value=\'' + Data.peoples[PeopleKey][itemPKey].name + '\'>';
});
});
}
});
}
对我来说,这很完美!
推荐阅读
- python - 我无法显示评论数
- java - 为什么我的 do-while 循环在使用 Java Scanner 输入无效输入后变成无限循环?
- reactjs - 文档 Firebase React 上的 onSnapshot
- c++ - 使用中继器时不显示 Qml 按钮列表
- python - 如何通过python脚本将信息从mysql数据库发送到ios应用程序
- flutter - Flutter Stream 每次应用启动时仅工作一次
- reactjs - Material UI Switch 自定义类 react
- php - 警告:mysqli_num_rows() 需要参数 1
- android - XML 中没有更多建议
- javascript - forEach 检索索引并使 Get API 调用 SpringBoot .jsp