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

标签 javascript json properties

如何将 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]);
    }
}

谢谢你: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))

关于javascript - 递归地将 JSON 对象转换为 JavaScript 中的键/值数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40462533/

相关文章:

javascript - 匹配 5 个(精确)逗号分隔货币值的正则表达式

javascript - 替换时出现无效字符错误?

Javascript:如何将参数传递给不带括号调用的方法

ASP.NET:如何从 JScript 中访问 UserControl 的属性?

javascript - 如何将输入框中输入的文本转换为小写?

javascript - js 数组转为 json 但有些值消失了

c# - 如何使用 C# 从 JSON 字符串中删除特定属性

json - 尝试在不使 Node.js 服务器崩溃的情况下解析 JSON

java - 如何修复Java系统属性错误

javascript - 在 Object.keys() 上使用 for..in 打印错误的键