修改嵌套的JSON对象

时间:2017-12-05 17:35:37

标签: javascript json

我有一个带有加密值的json对象,我将简化这一点并假装所有值都是数字,我需要这个问题的数字x3。有没有办法循环遍历json对象并更新每个值,然后返回原始对象的解密版本:

var encrypted = {
         a: 10,
         b: 4,
         c: {x:3, y:2, z:1},
 }

var decrypted = decryptJSON(encrypted) //<--- looking for this function


//decrypted = {
//         a: 30,
//         b: 12,
//         c: {x:9, y:6, z:3},
// }

我尝试使用像https://stackoverflow.com/a/29516227/620723这样的东西循环遍历对象,但这只适用于非嵌套的json对象。

另外我上面给出的例子实际上只嵌套了一个级别,我可能在嵌套里面的巢里面筑巢......

1 个答案:

答案 0 :(得分:2)

您可以编写一个递归函数来遍历对象并更新您的值。这是一个简单的例子:

var encrypted = {
    a: 10,
    b: 4,
    c: {x: 3, y: 2, z: 1},
};

var updateObject = function (obj) {
    for (var key in obj) {
        obj[key] = updateValue(obj[key]);
    }
    return obj;
}

var updateValue = function(value) {
    if (typeof(value) === "object") {
        return updateObject(value);
    } else {
        return value * 3;
    }
}

updateObject(encrypted);
console.log(encrypted);

请注意,只有在对象中只有对象和数值时,才会有效。如果您的数据更具动态性,您肯定需要调整功能。

这应该可以让你开始!