如何在没有特定键的情况下从 JSON 对象中获取值
How to I fetch values from JSON object without specific key
我有以下 JSON 个对象,我想使用 javascript 从我的开发控制台日志中仅获取某些值。我试过但在代码下面,但我不知道如何遍历数组数组。任何人都可以建议我如何实现这一目标。
var infoJSON;
for(key in myClass) {
infoJSON = myClass[key];
console.log(infoJSON);
}
var myClass= {
"Subjects":"3",
"Subject":{
"maths":{
"subject_id":"1",
"subject_level":"easy",
"marks":"90"
},
"english":{
"subject_id":"2",
"subject_level":"medium",
"marks":"80"
},
"physics":{
"subject_id":"3",
"subject_level":"tough",
"marks":"70"
}
},
"Average": "80"
};
我正在尝试编写 JavaScript 函数,以下面给出的格式在浏览器开发工具控制台中输出科目总数、每个科目的分数和平均分数。
Subjects: 3
- maths (90)
- english (80)
- physics (70)
Average: 80
该代码应该适用于具有相同结构的任何 JSON 对象,因此不想使用硬编码键(例如数学、物理)
这可以使用简单的 for in
, Object.keys()
.
来完成
尝试以下操作:
var myClass= {"Subjects":"3","Subject":{"maths":{"subject_id":"1","subject_level":"easy","marks":"90"},"english":{"subject_id":"2","subject_level":"medium","marks":"80"},"physics":{"subject_id":"3","subject_level":"tough","marks":"70"}},"Average":"80"};
for(key in myClass){
if(myClass[key].constructor.toString().indexOf("Object") > 0){
Object.keys(myClass[key]).forEach((k)=>{
console.log(k +" - "+ myClass[key][k].marks);
});
} else{
console.log(key +" - " +myClass[key]);
}
}
这只是检查您在 class 中迭代的内容的问题。如果键是一个字符串,你可以简单地打印它,如果不是,你可以迭代它的键,然后打印那个
var myClass= {"Subjects":"3","Subject":{"maths":{"subject_id":"1","subject_level":"easy","marks":"90"},"english":{"subject_id":"2","subject_level":"medium","marks":"80"},"physics":{"subject_id":"3","subject_level":"tough","marks":"70"}},"Average":"80"};
for (let key in myClass) {
let value = myClass[key];
if (typeof value === 'string') {
console.log( `${key}: ${value}` );
continue;
}
console.log( Object.keys( value ).map( k => `- ${k} (${value[k].marks})` ).join('\n') );
}
// if you want it in one log output
console.log( Object.keys( myClass ).reduce( (result, key) => {
if (typeof myClass[key] === 'object') {
let value = myClass[key];
return result.concat( Object.keys( value ).map( k => `- ${k} (${value[k].marks})` ) );
}
result.push( `${key}: ${myClass[key]}` );
return result;
}, [] ).join('\n') );
Subjects 和 Average 总是在同一个位置,所以你硬编码了。然后还要在数组上去判断其他字段:
var myClass= {
"Subjects":"3",
"Subject":{
"maths":{
"subject_id":"1",
"subject_level":"easy",
"marks":"90"
},
"english":{
"subject_id":"2",
"subject_level":"medium",
"marks":"80"
},
"physics":{
"subject_id":"3",
"subject_level":"tough",
"marks":"70"
}
},
"Average": "80"
};
var infoJSON;
console.log('Subjects: ' + myClass['Subjects']);
for(key in myClass['Subject']) {
console.log('- ' + key + ' (' + myClass['Subject'][key]['marks'] + ')');
}
console.log('Average: ' + myClass['Average']);
我有以下 JSON 个对象,我想使用 javascript 从我的开发控制台日志中仅获取某些值。我试过但在代码下面,但我不知道如何遍历数组数组。任何人都可以建议我如何实现这一目标。
var infoJSON;
for(key in myClass) {
infoJSON = myClass[key];
console.log(infoJSON);
}
var myClass= {
"Subjects":"3",
"Subject":{
"maths":{
"subject_id":"1",
"subject_level":"easy",
"marks":"90"
},
"english":{
"subject_id":"2",
"subject_level":"medium",
"marks":"80"
},
"physics":{
"subject_id":"3",
"subject_level":"tough",
"marks":"70"
}
},
"Average": "80"
};
我正在尝试编写 JavaScript 函数,以下面给出的格式在浏览器开发工具控制台中输出科目总数、每个科目的分数和平均分数。
Subjects: 3
- maths (90)
- english (80)
- physics (70)
Average: 80
该代码应该适用于具有相同结构的任何 JSON 对象,因此不想使用硬编码键(例如数学、物理)
这可以使用简单的 for in
, Object.keys()
.
尝试以下操作:
var myClass= {"Subjects":"3","Subject":{"maths":{"subject_id":"1","subject_level":"easy","marks":"90"},"english":{"subject_id":"2","subject_level":"medium","marks":"80"},"physics":{"subject_id":"3","subject_level":"tough","marks":"70"}},"Average":"80"};
for(key in myClass){
if(myClass[key].constructor.toString().indexOf("Object") > 0){
Object.keys(myClass[key]).forEach((k)=>{
console.log(k +" - "+ myClass[key][k].marks);
});
} else{
console.log(key +" - " +myClass[key]);
}
}
这只是检查您在 class 中迭代的内容的问题。如果键是一个字符串,你可以简单地打印它,如果不是,你可以迭代它的键,然后打印那个
var myClass= {"Subjects":"3","Subject":{"maths":{"subject_id":"1","subject_level":"easy","marks":"90"},"english":{"subject_id":"2","subject_level":"medium","marks":"80"},"physics":{"subject_id":"3","subject_level":"tough","marks":"70"}},"Average":"80"};
for (let key in myClass) {
let value = myClass[key];
if (typeof value === 'string') {
console.log( `${key}: ${value}` );
continue;
}
console.log( Object.keys( value ).map( k => `- ${k} (${value[k].marks})` ).join('\n') );
}
// if you want it in one log output
console.log( Object.keys( myClass ).reduce( (result, key) => {
if (typeof myClass[key] === 'object') {
let value = myClass[key];
return result.concat( Object.keys( value ).map( k => `- ${k} (${value[k].marks})` ) );
}
result.push( `${key}: ${myClass[key]}` );
return result;
}, [] ).join('\n') );
Subjects 和 Average 总是在同一个位置,所以你硬编码了。然后还要在数组上去判断其他字段:
var myClass= {
"Subjects":"3",
"Subject":{
"maths":{
"subject_id":"1",
"subject_level":"easy",
"marks":"90"
},
"english":{
"subject_id":"2",
"subject_level":"medium",
"marks":"80"
},
"physics":{
"subject_id":"3",
"subject_level":"tough",
"marks":"70"
}
},
"Average": "80"
};
var infoJSON;
console.log('Subjects: ' + myClass['Subjects']);
for(key in myClass['Subject']) {
console.log('- ' + key + ' (' + myClass['Subject'][key]['marks'] + ')');
}
console.log('Average: ' + myClass['Average']);