2016-07-28 75 views
0

我想從JSON文件中獲取數據並將鍵和值對複製到數組中。 例如:將JSON數據複製到數組中

jsondata = { 
    'Name': {'text': {'name': 'John'}}, 
    'Age': {'number': {'age': '22'}} 
} 

array=[["Name","text","name","John"] 
     ["Age","number","age","22"]] 

這可能嗎?

+0

調查'lodash'包。我很確定這個函數有這個功能 –

回答

2

在香草JS也可能是這樣的:

data = { 
 
    'Name': {'text': {'name': 'John'}}, 
 
    'Age': {'number': {'age': '22'}} 
 
} 
 

 
function linearize(obj) { 
 
    if (typeof obj !== 'object') 
 
     return [obj]; 
 
    var res = []; 
 
    for (var key in obj) { 
 
     for (var a of linearize(obj[key])) { 
 
      res.push([key].concat(a)) 
 
     } 
 
    } 
 
    return res; 
 
} 
 

 
r = linearize(data) 
 
console.log(r)

+0

這種方法假定嵌套總是2步深,我的代碼假設每個嵌套對象只有一個孩子,@ javier的代碼假設你可以訪問'.map'和'arrow函數',故事的寓意是'lodash'可能已經解決了這種問題:) –

+0

@JasonSperske:'這種方法假定嵌套總是2步深 - 爲什麼? – georg

+0

完全錯過了你的內循環中的遞歸調用,我的不好。顯然,我們都在採用相同的方法,但您的方法更加靈活 –

2

不使用外部庫,你可以嘗試:

function concatify (json) { 
    return typeof json == "string" ? json : Object.keys(json).reduce((x,y) => x.concat(y).concat(concatify(json[y])), []); 
} 

Object.keys(jsondata).map(k => [k].concat(concatify(jsondata[k]))); 

Object.keys(json).map(k => [k].concat(JSON.stringify(json[k]).replace(/["\{\}]/g,'').split(':')))