-1

I have the follwing JSON:

{  
   "_id":"9876567833",
   "result":{  
      "Mercedes":[  
         {  
            "category_name":"Car"
         },
         {  
            "category_name":"Fast"
         }
      ],
      "BMW":[  
         {  
            "category_name":"Car"
         }
      ]
   }

I don't know before "Mercedes" or "BMW" (it could change, this is just for the example). I need to get "Car", "Fast", "Car".

The JSON is in categories So I tried:

    var categoArray = [];
    for(var i =0; i < categories.length; i++){
        for (var idx in categories[i].result) {
               if (categories[i].result[idx].length > 0){
                   categoArray.push(categories[i].result[idx].category_name);
          }
         }
       }

But it doesn't work.

[EDIT] It is not the same :Access / process (nested) objects, arrays or JSON

My question is much more complex

Thanks for your help!

Community
  • 1
  • 1
Jose
  • 1,039
  • 1
  • 8
  • 21

2 Answers2

3

You're close, but you need 1 more loop:

var categoArray = [];
for (var i = 0; i < categories.length; i++) {
    for (var key in categories[i].result) {
        for (var j = 0; j < categories[i].result[key].length; j++) {
            categoArray.push(categories[i].result[key][j].category_name);
        }
    }
}
Felix Kling
  • 756,363
  • 169
  • 1,062
  • 1,111
tymeJV
  • 102,126
  • 13
  • 159
  • 155
0

categories[i].result[idx] returns an array, not an object. Therefore, categories[i].result[idx].category_name will be undefined.

Rodney Golpe
  • 4,536
  • 1
  • 15
  • 15