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