我需要帮助在 javascript 中将 JSON 数据转换为 3 级多维数组


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

我需要帮助在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();