我需要解析Json响应
{
"product": "office",
"info":
{
"brand":
[
"1brand"
],
"detail":
{
"number":
{
"min": 1,
"max": 5
},
}
}
};
使用带点缀的字符串键的对象
{
"product" : "office",
"info.brand" : ["1brand"],
"info.detail.number.min" : 1,
"info.detail.number.max" : 5
}
未知嵌套和相邻对象的数量。解决方案应该是具有一个参数的函数-响应对象,然后返回新对象(带有虚线字符串键)。
答案 0 :(得分:1)
您可以对每个级别的嵌套对象采用递归方法,并收集键并将其用于新对象中的最后找到的值。
function flatKeys(object) {
function iter(part, keys) {
Object.keys(part).forEach(function (k) {
var allKeys = keys.concat(k);
if (part[k] && !Array.isArray(part[k]) && typeof part[k] === 'object') {
return iter(part[k], allKeys);
}
flat[allKeys.join('.')] = part[k];
});
}
var flat = {};
iter(object, []);
return flat;
}
var object = { product: "office", info: { brand: ["1brand"], detail: { number: { min: 1, max: 5 } } } };
console.log(flatKeys(object));
答案 1 :(得分:0)
您可以使用reduce
方法创建递归函数。
let data = {"product":"office","info":{"brand":["1brand"],"detail":{"number":{"min":1,"max":5}}}}
function parse(input, res = {}, prev = '') {
return Object.keys(input).reduce((r, e) => {
let key = prev + (prev && '.') + e, val = input[e]
if (typeof val == "object" && !Array.isArray(val)) parse(val, res, key)
else r[key] = input[e]
return r;
}, res)
}
let result = parse(data)
console.log(result)