在JavaScript中递归地将JSON对象转换为键/值数组

Recursively transform a JSON object to an array of key/value in JavaScript

本文关键字:转换 数组 对象 JSON JavaScript 递归      更新时间:2023-09-26

如何将JSON转换为JS中的属性数组,无论JSON的深度是什么

JSON

{
    "foo": {
        "bar": {
            "baz": "UP"
        }
    }
}

键/值属性

{
  "foo.bar.baz": "UP"
}

一级解决方案

我当前的代码只处理一个级别,而不是n:

var user = {name: 'Corbin', age: 20, location: 'USA'},
    key;
for (key in user) {
    if (user.hasOwnProperty(key)) {
        console.log(key + " = " + user[key]);
    }
}

Thank you:D

基本上,如果成员是对象,则进行递归调用,否则,更新输出对象:

data = {
    foo: "hello",
    bar: {
        baz: {
            qux: "UP"
        },
        spam: 'ham'
    }
}
function unwrap(obj, prefix) {
    var res = {};
    for (var k of Object.keys(obj)) {
        var val = obj[k],
            key = prefix ? prefix + '.' + k : k;
        if (typeof val === 'object')
            Object.assign(res, unwrap(val, key)); // <-- recursion
        else
            res[key] = val;
    }
    return res;
}
console.log(unwrap(data))