2015-04-01 4 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"] 
     } 
    }} 

в вышеупомянутом случае я имею графство =»" или county = null в одном сценарии, поэтому он был заменен, как показано выше в рамнагарской палате.

+0

Вы пробовали что-нибудь до сих пор? Мы готовы помочь вам, но я действительно не вижу проблемы, связанной с * кодом * здесь. – Jordy

+0

да, я пробовал много способов использовать для циклов и всех, но я ищу скромный и лучший подход для этой проблемы, надеюсь, вы поняли –

ответ

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>

Смежные вопросы