2015-04-01 113 views
-1

我有这样的JSON数据data:[ {'country':'uk','district':'whitefield','ward':'eastward','county':'eastcounty1','company':'privatecompany'}, {'country':'uk','district':'whitefield','ward':'eastward','county':'eastcounty1','company':'privatecompany2'}, {'country':'uk','district':'whitefield','ward':'eastward','county':'eastcounty2','company':'privatecompany3'}, {'country':'uk','district':'whitefield','ward':'westward','county':'westcounty1','company':'privatecompany'}, {'country':'uk','district':'blackfield','ward':'westward','county':'eastcounty1','company':'privatecompany'}, {'country':'india','district':'andhra','ward':'ramnagar','county':'','company':'privatecompany'} ]JSON格式分层数据

我不得不将其转换为阶层结构如..

data:{'uk':{ 
     "whitefield":{ 
      "eastward":{ 
      "eastcounty1":["privateCompany","privateCompany2"], 
      "eastcounty2":["privatecompany3"] 
      }, 
      "westward":{ 
      "westcounty1":["privatecompany"], 
      "eastcounty1":["privatecompany"] 
      } 
      }, 
     "blackfield":{ 
      "westward":{"eastcounty1":["privatecompany"]}     
     } 
    }, 
"india":{ 
    "andhra":{ 
     "ramnagar":["privatecompany"] 
     } 
    }} 
在上述情况下

我有县=”“或在一个场景中,县= null,因此它被替换为如上所示在ramnagar病房。

+0

你尝试过什么到目前为止?我们愿意帮助您,但我并没有在这里看到与* code *有关的问题。 – Jordy 2015-04-01 11:53:01

+0

是的,我已经尝试了很多方式使用for循环和所有,但我正在寻找一个适度和最好的方法来解决这个问题,希望你能理解 – 2015-04-02 17:19:51

回答

1

你只需要遍历每个项目,建立自己的JSON对象Fiddle here

function mergeData(data) { 
 
    var outp = {}; 
 

 
    // loop through each object and add 
 
    for (var i = 0; i < data.length; i++) { 
 
     var obj = data[i]; 
 
     if (outp.hasOwnProperty(obj.country)) { 
 
      if (outp[obj.country].hasOwnProperty(obj.district)) { 
 
       if (outp[obj.country][obj.district].hasOwnProperty(obj.ward)) { 
 
        if (outp[obj.country][obj.district][obj.ward].hasOwnProperty(obj.county)) { 
 
         outp[obj.country][obj.district][obj.ward][obj.county].push(obj.company); 
 
        } 
 
        else { 
 
         if (obj.county == "" || obj.county == null) { 
 
          if (Array.isArray(outp[obj.country][obj.district][obj.ward])) { 
 
           outp[obj.country][obj.district][obj.ward].push(obj.company); 
 
          } 
 
          else { 
 
           outp[obj.country][obj.district][obj.ward] = [obj.company]; 
 
          } 
 
         } 
 
         else { 
 
          outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company]; 
 
         } 
 
        } 
 
       } 
 
       else { 
 
        outp[obj.country][obj.district][obj.ward] = {}; 
 
        outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company];      
 
       } 
 
      } else { 
 
       outp[obj.country][obj.district] = {}; 
 
       outp[obj.country][obj.district][obj.ward] = {}; 
 
       outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company]; 
 
      } 
 
     } else { 
 
      outp[obj.country] = {}; 
 
      outp[obj.country][obj.district] = {}; 
 
      
 
      if (obj.county == "") { 
 
       outp[obj.country][obj.district][obj.ward] = [obj.company]; 
 
      } 
 
      else { 
 
       outp[obj.country][obj.district][obj.ward] = {}; 
 
       outp[obj.country][obj.district][obj.ward][obj.county] = [obj.company]; 
 
      } 
 

 
     } 
 
    } 
 

 
    console.log(JSON.stringify(outp)); 
 
    return outp; 
 
} 
 

 
function doMerge() { 
 

 
    var data = [{ 
 
     'country': 'uk', 
 
     'district': 'whitefield', 
 
     'ward': 'eastward', 
 
     'county': 'eastcounty1', 
 
     'company': 'privatecompany' 
 
    }, { 
 
     'country': 'uk', 
 
     'district': 'whitefield', 
 
     'ward': 'eastward', 
 
     'county': 'eastcounty1', 
 
     'company': 'privatecompany2' 
 
    }, { 
 
     'country': 'uk', 
 
     'district': 'whitefield', 
 
     'ward': 'eastward', 
 
     'county': 'eastcounty2', 
 
     'company': 'privatecompany3' 
 
    }, { 
 
     'country': 'uk', 
 
     'district': 'whitefield', 
 
     'ward': 'westward', 
 
     'county': 'westcounty1', 
 
     'company': 'privatecompany' 
 
    }, { 
 
     'country': 'uk', 
 
     'district': 'blackfield', 
 
     'ward': 'westward', 
 
     'county': 'eastcounty1', 
 
     'company': 'privatecompany' 
 
    }, { 
 
     'country': 'india', 
 
     'district': 'andhra', 
 
     'ward': 'ramnagar', 
 
     'county': '', 
 
     'company': 'privatecompany' 
 
    }]; 
 

 
    mergeData(data); 
 
}
<button onclick="doMerge()">Merge</button>