我需要帮助在javascript中将JSON数据转换为3级多维数组。我以 JSON 格式检索的代码如下所示:
[
{'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'}
]
但我需要这种格式:
$scope.countries = {
'United States':
{
'Pennsylvania': ['Philadelphia', 'Pittsburgh', 'Harrisburg'],
'California': ['Sacramento', 'Fremont', 'Los Angeles']
},
'Australia':
{
'New South Wales': ['Sydney'],
'Victoria': ['Melbourne']
}
};
所以它看起来像这样给你你想要的 JSON
普伦克:http://plnkr.co/edit/Nx4hrAex8JCCbnYG5X3t?p=preview
编辑
已编辑以使用新格式。
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];
}
}
我强烈建议您更改数据的通过方式。 话虽如此,如果您打算键入数组括号而不是对象括号,我已经为您的问题提供了一个 JSBin 解决方案。
https://jsbin.com/qaxubigija/edit?js,console
function dataParse() {
var data = [
[ 'Philadelphia','Pennsylvania','United States'],
['Pittsburgh','Pennsylvania','United States'],
['Harrisburg','Pennsylvania', 'United States'],
['Sacramento', 'California', 'United States'],
['Fremont', 'California', 'United States'],
['Los Angeles', 'California', 'United States'],
['Sydney', 'New South Wales', 'Australia'],
['Melbourne', 'Victoria', 'Australia']
];
var newObject = {};
for(var i = 0; i < data.length; i++) {
// create your references
var currentNode = data[i],
city = currentNode[0],
state = currentNode[1],
country = currentNode[2];
// check that the country property exists
// create if it does not exist
if( typeof newObject[country] == 'undefined'){
newObject[country] = {};
}
// check that the state property exists
// create if it does not exist
if( typeof newObject[country][state] == 'undefined'){
newObject[country][state] = [];
}
// push city to the proper array
newObject[country][state].push(city);
}
console.log(newObject);
}
dataParse();