I need help converting JSON data into a multidimensional 3-level array in javascript

advertisements

I need help converting JSON data into a 3 level multidimensional array in javascript. My code that I an retrieving in JSON format looks like this:

[
 {'City':'Philadelphia','State':'Pennsylvania','Country':'United States'},
 {'City':'Pittsburgh','State':'Pennsylvania','Country':'United States'},
 {'City':'Harrisburg','State':'Pennsylvania', 'Country':'United States'},
 {'City':'Sacramento', 'State':'California', 'Country':'United States'},
 {'City':'Fremont', 'State':'California', 'Country':'United States'},
 {'City':'Los Angeles', 'State':'California','Country': 'United States'},
 {'City':'Sydney', 'State':'New South Wales', 'Country':'Australia'},
 {'City':'Melbourne', 'State':'Victoria', 'Country':'Australia'}
]

But I need it in this format:

$scope.countries = {
    'United States':
    {
       'Pennsylvania': ['Philadelphia', 'Pittsburgh', 'Harrisburg'],
       'California': ['Sacramento', 'Fremont', 'Los Angeles']
    },
    'Australia':
    {
       'New South Wales': ['Sydney'],
       'Victoria': ['Melbourne']
    }
};


So it would look something like this to give you the JSON you want

Plunker: http://plnkr.co/edit/Nx4hrAex8JCCbnYG5X3t?p=preview

EDIT

Edited to work with the new format.

var original =  [
 {'City':'Philadelphia','State':'Pennsylvania','Country':'United States'},
 {'City':'Pittsburgh','State':'Pennsylvania','Country':'United States'},
 {'City':'Harrisburg','State':'Pennsylvania', 'Country':'United States'},
 {'City':'Sacramento', 'State':'California', 'Country':'United States'},
 {'City':'Fremont', 'State':'California', 'Country':'United States'},
 {'City':'Los Angeles', 'State':'California','Country': 'United States'},
 {'City':'Sydney', 'State':'New South Wales', 'Country':'Australia'},
 {'City':'Melbourne', 'State':'Victoria', 'Country':'Australia'}
]
  var json = {};
  for(var i in original){
    var country = original[i].Country;
    var state = original[i].State;
    var city = original[i].City;
    var obj = {};

    if(!json.hasOwnProperty(country)){
      obj[state] = [city];
      json[country] = obj;
    }
    else if(json[country].hasOwnProperty(state)){
      json[country][state].push(city);
    }
    else if(!json[country].hasOwnProperty(state)){
      json[country][state] = [city];
    }
  }