2013-07-18 41 views
0

我想格式化一堆数据,我可以用下面的格式检索这些数据。 (我也把一个可读的版本注释掉) 我想把OUTPUT(见底部)显示的每一行放在一个json对象。但它只保留最后一项的细节,而我希望每个项目都保持在正确的MGId和FGId值下。json将动态孩子添加到动态密钥

MGID MGName FGID FGName的itemId ITEMNAME
6272440:饮料:6272963:焦炭:6274904:百事可乐@@@

我使用jsonObj [MGID] [FGID] [MIID],我期待这将在 jsonObj [MGId] [FGId]下创建单独的[MIId]。显然,我错过了一些东西,或者它不能以这种方式工作。 任何人都可以告诉我什么是缺少或任何其他方式欢迎。谢谢!!

/* 
DATA READABLE FORMAT 
6272440:Beverage:6272963:Coke:6274904:[email protected]@@ 
6272440:Beverage:6272963:coke:6274494:coco cola 1 [email protected]@@ 
6272440:Beverage:6272951:Milk:6274300:Skim 1 [email protected]@@ 
6272440:Beverage:6272951:Milk:6274130:Full [email protected]@@ 
6272437:Food:6272919:Breakfast Menu:6274947:Bacon and [email protected]@@ 
6272437:Food:6272915:Lunch Menu:6274766:Chicken [email protected]@@ 
6272437:Food:6272915:Lunch Menu:6274922:Vegi [email protected]@@ 
6272437:Food:6272915:Lunch Menu:6274900:Garlic Bread"; 
*/ 

var sampleData = "6272440:Beverage:6272963:Coke:6274904:[email protected]@@6272440:Beverage:6272963:coke:6274494:coco cola 1 [email protected]@@6272440:Beverage:6272951:Milk:6274300:Skim 1 [email protected]@@6272440:Beverage:6272951:Milk:6274130:Full [email protected]@@6272437:Food:6272919:Breakfast Menu:6274947:Bacon and [email protected]@@6272437:Food:6272915:Lunch Menu:6274766:Chicken [email protected]@@6272437:Food:6272915:Lunch Menu:6274922:Vegi [email protected]@@6272437:Food:6272915:Lunch Menu:6274900:Garlic Bread"; 
    var elements = sampleData.split("@@@"); 
    var jsonObj = {}; 
    var menuItemsArr = []; 
    var previousMGId=""; 
    var previousFGId=""; 

    for(var i=0; i<elements.length; i++) { 

    var nextMenuPack = elements[i]; 

    var nextMenuPackInnerHtml = nextMenuPack; //nextMenuPack.innerHTML; 
    var nextMenuPackArr  = nextMenuPackInnerHtml.split(":"); 
    var MGId = nextMenuPackArr[0]; 
    var MGName = nextMenuPackArr[1]; 
    var FGId = nextMenuPackArr[2]; 
    var FGName = nextMenuPackArr[3]; 
    var MIId = nextMenuPackArr[4]; 
    var MIName = nextMenuPackArr[5]; 
    console.log(MGName +"-"+FGName+"-"+MIName); 


    jsonObj[MGId] = {} ; 
    jsonObj[MGId][FGId] = {};  
    //var jsonObj = {}; 
    jsonObj[MGId][FGId][MIId] = {  
        "MGName" : MGName, 
        "MGId": MIId, 
        "FGName": FGName, 
        "FGId": FGId, 
        "MIName" : MIName, 
        "MIId": MIId 

     }; 

}  


document.write('<pre>'+JSON.stringify(jsonObj, null, "\t")+'</pre>'); 

输出

{ 
    "6272440": { //major group id 
     "6272951": { //family group id 
      "6274130": { // menuitem id - JUST LAST ONE, OTHERS OVERWRITTEN! 
       "MGName": "Beverage", 
       "MGId": "6274130", 
       "FGName": "Milk", 
       "FGId": "6272951", 
       "MIName": "Full Cream", 
       "MIId": "6274130" 
      } 
     } 
    }, 
    "6272437": { 
     "6272915": { 
      "6274900": {// menuitem id - JUST LAST ONE, OTHERS OVERWRITTEN! 
       "MGName": "Food", 
       "MGId": "6274900", 
       "FGName": "Lunch Menu", 
       "FGId": "6272915", 
       "MIName": "Garlic Bread", 
       "MIId": "6274900" 
      } 
     } 
    } 
} 
+0

每次通过循环将元素重新初始化为“{}”。如果元素不存在,则只应初始化该元素。 – Barmar

+0

@Barmar谢谢你看看。我正在初始化jsonObj [MGId] = {}; AND jsonObj [MGId] [FGId] = {};但每次将MIId添加到jsonObj [MGId] [FGId] [MIId]。也许我误解了你的帮助。你能给我一个小例子.. – Ozland

+0

@Barmar:我想我必须被告知这个让它工作。我在添加评论后马上就明白了。再次感谢。 – Ozland

回答

0

,如果他们不是已经在那里只有初始化jsonObj[MGId]jsonObj[MGId][FGId]

jsonObj[MGId] = jsonObj[MGId] || {} ; 
jsonObj[MGId][FGId] = jsonObj[MGId][FGId] || {};  
//var jsonObj = {}; 
jsonObj[MGId][FGId][MIId] = {  
       "MGName" : MGName, 
       "MGId": MIId, 
       "FGName": FGName, 
       "FGId": FGId, 
       "MIName" : MIName, 
       "MIId": MIId 

    }; 
+0

再次感谢!你的方式看起来非常professinal ..我也检查了if(!(MGId在jsonObj)){jsonObj [MGId] = {};}如果(!(FGId在jsonObj [MGId])){jsonObj [MGId] [ FGId] = {};} – Ozland