2017-05-08 59 views
1

我想在基於列的JSON中轉換基於行的JSON。我會以行爲形式接收JSON,並會使用它進行一些可視化,這在基於列的表單中會更容易。在基於列的JSON中轉換基於行的JSON

基於行會是這個樣子:

{ 
    "0": { 
    "fname": "John", 
    "lname": "Miller", 
    "age": 50 
    }, 
    "1": { 
    "fname": "Eve", 
    "lname": "Johnson", 
    "age": 40 
    }... 

示例列爲主:

{ 
    "fname": { 
    "0" : "John", 
    "1" : "Eve" 
    }, 
    "lname": { 
    "0" : "Miller", 
    "1" : "Johnson" 
    }, 
    "age": { 
    "0": 50, 
    "1" : 40 
    }... 

難道還有比剛剛經歷的所有元素循環,徹底改寫了JSON更有效的方法?

謝謝!

+1

這個結構看起來很奇怪。你爲什麼用數值屬性代替數組? – str

+0

數值屬性只是一個例子。我只寫下它們來強調行和列之間的變化。他們沒有必要。 – User12547645

回答

0

沒有比通過每一個對象循環之外,沒有其他更好的辦法。由於您需要映射所有值,因此您必須通過所有鍵。

+0

非常感謝。我希望可能有不同的方式,但我將不得不使用循環。 – User12547645

+0

歡迎。你可以接受這個答案。一旦你完成了這個功能,把它作爲一個庫公開可用。可能對某些人有用。 :) –

1

至少,您需要交換結果對象的鍵。

var data = { 0: { fname: "John", lname: "Miller", age: 50 }, 1: { fname: "Eve", lname: "Johnson", age: 40 } }, 
 
    result = Object.keys(data).reduce(function (r, k) { 
 
     Object.keys(data[k]).forEach(function (l) { 
 
      r[l] = r[l] || {}; 
 
      r[l][k] = data[k][l]; 
 
     }); 
 
     return r; 
 
    }, {}); 
 

 
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

+0

Danke Nina。好主意,效果很好。 – User12547645