简体   繁体   English

如何在没有特定键的情况下从JSON对象获取值

[英]How to I fetch values from JSON object without specific key

I have below JSON object from which I want to fetch only certain values on my dev console log using javascript. 我有下面的JSON对象,我想使用javascript从其仅获取开发控制台日志上的某些值。 I tried but below code but I don't know how to loop through array of array. 我试过但下面的代码,但我不知道如何遍历数组数组。 Can anyone please suggest how can i achieve this. 任何人都可以建议我如何实现这一目标。

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"
};

I am trying to write JavaScript function that outputs the total number of subjects, each subject with marks, and average marks in the browser dev tools console in format given below. 我正在尝试编写JavaScript函数,以在浏览器开发工具控制台中以以下给定的格式输出主题的总数,每个主题的分数和平均分数。

Subjects: 3
- maths (90)
- english (80)
- physics (70)
Average: 80

The code should work for ANY JSON object with the same structure so don't want to use hard coded keys (eg. maths,physics) 该代码应可用于具有相同结构的任何JSON对象,因此不想使用硬编码键(例如,数学,物理学)

This can be done using simple for in , Object.keys() . 这可以通过Object.keys()简单for in来完成。

Try the following: 请尝试以下操作:

 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]); } } 

It would be just a question of checking what you are iterating in your class. 这只是检查您在课堂上要进行迭代的问题。 In case the key is a string, you can simply print it, in case it is not, you can iterate it keys, and print that one 如果键是字符串,则可以简单地打印它;如果不是,则可以迭代它的键,然后打印该键

 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 and Average are always at the same position, so you hardcode it. 主题和平均数始终位于同一位置,因此您需要对其进行硬编码。 Then you have to go on the array to determine the other fields: 然后,您必须继续执行数组以确定其他字段:

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']);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM