2015-11-18 19 views
-1

我想處理一個json文件並創建一個新的,但它不起作用。JavaScript - 處理和重構JSON不工作

老JSON的結構是這樣的:

[ 
    { 
     "3":{ 
     "value":2 
     }, 
     "4":{ 
      "value":1 
     } 
    }, 
    { 
     "3":{ 
     "value":6 
     }, 
     "4":{ 
      "value":1 
     } 
    }...and so on 

我想要做的就是創建一個新的JSON對象,該對象只有兩個對象0和1內的各他們屆時將有來自索引3和4的值從舊人,這應該是這個樣子:

{ 
    "0":{ 
     "0":[ 
      { 
       "0":2 
      } 
     ], 
     "1":[ 
      { 
       "0":6 
      } 
     ]..and so on 
    }, 
    "1":{ 
     "0":[ 
      { 
       "0":1 
      } 
     ], 
     "1":[ 
     { 
      "0":1 
     } 
     ]..and so on 
    } 
} 

的問題是,當我處理,煮老的JSON股指雙雙輸出(0,1 )是一樣的。我試圖循環它通過3和4,並將這些值分配到新的數組,但有些不太正確。

分數代碼:

//loop through the keysIndex 
for (var c in keysIndex) { 
    //the new json has to be 2 objects, hence the below 
    newData[c] = {}; 
    var vallueArr = []; 
    var newObj = { 
     0: oldData[i][keysIndex[c]].value 
    } 
    vallueArr.push(newObj); 
    objInNewData[entries] = vallueArr; 
    //the problem is somehwere here, it is appending twice the same 
    //objInNewData and not both 3 and 4 individually 
    newData[c] = objInNewData; 
} 

赫斯是整個邏輯:PLUNKER

能有人幫我不能讓我的頭圍繞這個:(

非常感謝

+0

你怎麼知道,這3名映射到0和4比1? –

+0

這個數據結構對我來說似乎很奇怪。因爲你在對象關鍵字中使用數字,所以''[[{value:'foo'},{value:'foo2'} ...],...]''更合理。 – Raulucco

+0

@NinaScholz因爲我創建了一個數組(3和4),它應該循環並映射它。它在蹲點。任何想法如何解決?不幸的是,我只需要那樣的輸出。 –

回答

1

正如我上面提到的,使用對象鍵索引不是一個好主意,因爲Javascript中的對象沒有定義的順序。 st改爲使用數組。

var data = [ 
 
     { 
 
      "3": { "value": 2 }, 
 
      "4": { "value": 1 } 
 
     }, { 
 
      "3": { "value": 6 }, 
 
      "4": { "value": 1 } 
 
     } 
 
    ], 
 
    keys = Object.keys(data[0]), // <-- ATTENTION! 
 
    obj = {}; 
 

 
data.forEach(function (a, i) { 
 
    keys.forEach(function (k, j) { 
 
     obj[j] = obj[j] || {}; 
 
     obj[j][i] = obj[j][i] || []; 
 
     obj[j][i].push({ '0': a[k].value }); 
 
    }); 
 
}); 
 

 
document.write('<pre>' + JSON.stringify(obj, 0, 4) + '</pre>');

+0

哇,你是明星!非常感謝! :) –