var jsonObj = [
{
property1 : "one",
property2 : "two",
property3 : "three",
property4 : [
{
name: "nicholas",
name1: "cage"
},
{
name: "stuart",
name1: "walker"
}
]
}
];
var strBuilder = [];
for(var key in jsonObj){
if (jsonObj.hasOwnProperty(key)) {
strBuilder.push("Key is " + key + ", value is " + jsonObj[key] + "\n");
}
}
alert(strBuilder.join(""));
当对象接近属性4时,我正在获取对象 但我想循环访问整个代码。
答案 0 :(得分:1)
当您进入property4
时,您的函数会尝试将对象数组转换为字符串,正如您所注意到的那样,它不能很好地工作。您需要获取数组中的每个对象,并以与处理当前对象相同的方式对其进行处理。一种实现方法是创建一个接受对象的函数,就像您一样打印键,但是当看到一个数组时,它将接受每个键并将其传递回该函数。这称为递归。这是处理嵌套数据的好方法,特别是如果您不提前知道如何嵌套数据。
这里有一些东西可以开始:
var jsonObj={property1 : "one",property2 : "two",property3 : "three",property4 : [{name: "nicholas",name1: "cage"},{name: "stuart",name1: "walker"}]};
var strBuilder = [];
function stringer(obj) {
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
if (Array.isArray(obj[key])) {
strBuilder.push("Key is " + key + ", value is an array containing: \n")
obj[key].forEach(item => stringer(item)) // call it recursively
} else {
strBuilder.push("Key is " + key + ", value is " + obj[key] + "\n");
}
}
}
}
stringer(jsonObj)
console.log(strBuilder.join(''))
您应该能够对此进行修改,以获得更好的格式设置,并根据需要处理各种嵌套的事物(例如对象)。
答案 1 :(得分:1)
如您所见,对象被强制转换为字符串本身,而不是对象内部的内容。您可能想先获取内容。
所以我将您的代码修改为递归函数。
var jsonObj = [
{
property1 : "one",
property2 : "two",
property3 : "three",
property4 : [
{
name: "nicholas",
name1: "cage"
},
{
name: "stuart",
name1: "walker"
}
]
}
];
function objectStringer(obj){
var strBuilder = [];
for(var key in obj){
if (obj.hasOwnProperty(key)) {
if(typeof(obj[key]) == 'object')
strBuilder.push(objectStringer(obj[key]).join(""))
else
strBuilder.push("Key is " + key + ", value is " + obj[key] + "\n");
}
}
return strBuilder;
}
console.log(objectStringer(jsonObj).join(""));
答案 2 :(得分:0)
当键是对象时创建另一个循环
for(var key in jsonObj){
if (jsonObj.hasOwnProperty(key)) {
strBuilder.push("Key is " + key + ", value is " + jsonObj[key] + "\n");
}
if(typeof key==object){
for(var x in key){
if (jsonObj.hasOwnProperty(x)) {
strBuilder.push("Key is " + x + ", value is " + key[x] + "\n");
}
}