我想從JSON文件中獲取數據並將鍵和值對複製到數組中。 例如:將JSON數據複製到數組中
jsondata = {
'Name': {'text': {'name': 'John'}},
'Age': {'number': {'age': '22'}}
}
中
array=[["Name","text","name","John"]
["Age","number","age","22"]]
這可能嗎?
我想從JSON文件中獲取數據並將鍵和值對複製到數組中。 例如:將JSON數據複製到數組中
jsondata = {
'Name': {'text': {'name': 'John'}},
'Age': {'number': {'age': '22'}}
}
中
array=[["Name","text","name","John"]
["Age","number","age","22"]]
這可能嗎?
在香草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)
這種方法假定嵌套總是2步深,我的代碼假設每個嵌套對象只有一個孩子,@ javier的代碼假設你可以訪問'.map'和'arrow函數',故事的寓意是'lodash'可能已經解決了這種問題:) –
@JasonSperske:'這種方法假定嵌套總是2步深 - 爲什麼? – georg
完全錯過了你的內循環中的遞歸調用,我的不好。顯然,我們都在採用相同的方法,但您的方法更加靈活 –
不使用外部庫,你可以嘗試:
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(':')))
調查'lodash'包。我很確定這個函數有這個功能 –