0

Hi folks I have my json data like this

http://json-parser.com/24145c52

I want it to change in this shape (array of objects

  const model = [
    {
        instituteName:instituteName,
        courseName:courseName,
        studentFirstname:studentFirstname,
        studentSurname:studentSurname,
        appreciation:appreciation,
        finalGrade:finalGrade,
        behaviour:behaviour,
        completenessOfStapler:completenessOfStapler
  },
  {
        instituteName:instituteName,
        courseName:courseName,
        studentFirstname:studentFirstname,
        studentSurname:studentSurname,
        appreciation:appreciation,
        finalGrade:finalGrade,
        behaviour:behaviour,
        completenessOfStapler:completenessOfStapler
  }
  ]

Please help me in this

2 Answers 2

1

First you will have to iterate over the data

Then interate over institue courses

Then iterate over students assigned to those courses

Will look something like that

const model = [];

 for (let i = 0; i < jsonParserData.institutes.length; i++)
  for (let j = 0; j < jsonParserData.institutes[i].courses.length; j++)
    for (let k = 0; k < jsonParserData.institutes[i].courses[j].students.length; k++) {
      model.push({
        instituteName: jsonParserData.institutes[i].name,
        courseName: jsonParserData.institutes[i].courses[j].name,
        studentFirstname: jsonParserData.institutes[i].courses[j].students[k].firstName,
        studentSurname: jsonParserData.institutes[i].courses[j].students[k].surname,
      });
      jsonParserData.institutes[i].courses[j].students[k].attributes.map((item) => {
        switch (item.option) {
          case "apreciation":
            model[model.length - 1].apreciation = item.value;
            break;
          case "finalGrade":
            model[model.length - 1].finalGrade = item.value;
            break;
          case "behaviour":
            model[model.length - 1].behaviour = item.value;
            break;
          case "completenessOfStapler":
            model[model.length - 1].completenessOfStapler = item.value;
            break;
        }
      });
    }

Or using newer syntax

for (let institute of jsonParserData.institutes)
  for (let course of institute.courses)
    for (let student of course.students) {
      model.push({
        instituteName: institute.name,
        courseName: course.name,
        studentFirstname: student.firstName,
        studentSurname: student.surname,
      });
      student.attributes.map((item) => {
        switch (item.option) {
          case "apreciation":
            model[model.length - 1].apreciation = item.value;
            break;
          case "finalGrade":
            model[model.length - 1].finalGrade = item.value;
            break;
          case "behaviour":
            model[model.length - 1].behaviour = item.value;
            break;
          case "completenessOfStapler":
            model[model.length - 1].completenessOfStapler = item.value;
            break;
        }
      });
    }
Sign up to request clarification or add additional context in comments.

1 Comment

Thanks Alex your solutions also works .
1

You can do this by running a simple over the data like this

    // This is an empty array to store data
    const model = [];
    
    // This is the data array
    const dataArr = [];

// looping over the main array
    dataArr.map((data) => {
      let Obj = {
        instituteName: "",
        courseName: "",
        studentFirstname: "",
        studentSurname: "",
        appreciation: "",
        finalGrade: "",
        behaviour: "",
        completenessOfStapler: "",
      };
      // looping over the courses array inside main array
      data.map((course) => {
        // looping over the students array inside main course
        course.map((student) => {
          let Obj = {
            instituteName: data.name,
            courseName: course.name,
            studentFirstname: student.firstName,
            studentSurname: student.surName,
            appreciation: "",
            finalGrade: "",
            behaviour: "",
            completenessOfStapler: "",
          };
          model.push(Obj);
        });
      });
    });

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.