Как перебрать неправильный вложенный json с узлом js - PullRequest
0 голосов
/ 17 февраля 2019

Я создаю небольшое приложение в Nodejs и пытаюсь зациклить нерегулярный JSON для печати его данных.

Мой JSON имеет следующую структуру:

{
"courses": [
    {
        "java": [
            { "attendees": 43 },
            { "subject": "Crash course" }
        ]
    },
    {
        "python":
        {
            "occurrences": [
                { "attendees": 24 },
                { "subject": "another crash course" },
                { "notes": "completed with issues" }
            ,
                { "attendees": 30 },
                { "subject": "another crash course" },
                { "notes": "completed with issues" }
            ]
        }
    }
],
"instructors":[
    {
        "John Doe":[
            { "hours": 20 },
            { "experience": 50 },
            { "completed": true }
        ]
    },
    {
        "Anne Baes": [
            { "hours": 45 },
            { "experience": 40 },
            { "completed": false},
            { "prevExperience": true}
        ]
    }
]
}

Я хочу напечатать все данные, содержащиеся в JSON (хотелось бы что-то вроде):

courses
Java
attendees = 43
...
Anne Baes
hours = 45
experience = 40
completed = false
prevExperience = true

Я пробовал с:

for(element in data){
    console.log(`element = ${{element}}`);
}

и это толькопечатает:

element = [object Object]
element = [object Object]

(что имеет смысл, потому что json состоит из двух элементов)

Я попытался вложить строку:

for(element in data){

проблемаздесь есть нерегулярная структура, я имею в виду, «java» и «python» - это данные одного уровня, но в то же время они имеют разные значения (массив и объект) и в случае «инструкторов» они имеютзначения одного и того же типа, но они различаются по количеству значений.

Может кто-нибудь помочь мне?: (

Ответы [ 2 ]

0 голосов
/ 17 февраля 2019

Вы можете попробовать перебрать значения, используя рекурсивную функцию, подобную этой

var Obj {

//Contents

}

function printRec(obj){
if(Object.keys(obj).length>0||Array.isArray(obj)){
  for(elem in obj){
  printRec(obj);
  }
}else{
  //Process Value
  console.log(obj)
}
}
0 голосов
/ 17 февраля 2019

Вы можете сделать это, используя рекурсию и for..in loop

const obj = {
"courses": [
    {
        "java": [
            { "attendees": 43 },
            { "subject": "Crash course" }
        ]
    },
    {
        "python":
        {
            "occurrences": [
                { "attendees": 24 },
                { "subject": "another crash course" },
                { "notes": "completed with issues" }
            ,
                { "attendees": 30 },
                { "subject": "another crash course" },
                { "notes": "completed with issues" }
            ]
        }
    }
],
"instructors":[
    {
        "John Doe":[
            { "hours": 20 },
            { "experience": 50 },
            { "completed": true }
        ]
    },
    {
        "Anne Baes": [
            { "hours": 45 },
            { "experience": 40 },
            { "completed": false},
            { "prevExperience": true}
        ]
    }
]
};
function print(obj,isArr = false){
  for(let key in obj){
    if(typeof obj[key] === 'object'){
      if(isArr === false) console.log(key)
      print(obj[key],Array.isArray(obj[key]));
    }
    else console.log(`${key} = ${obj[key]}`)
  }
}
print(obj)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...