我想从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'包。我很确定这个函数有这个功能 –