繁体   English   中英

如何遍历nodejs中Json的嵌套属性?

[英]How Do I iterate through nested properties of Json in nodejs?

我有一个具有三层嵌套的json对象,我必须对其进行动态迭代

这是我的代码

var responseObj ={ 
           db_config:{
             db_user: 'das1234',
            },
           env_con:{
             db_con:'ds67'
           },
           db_password: 'ds345ty76',
           db_host: 'wdsa12'
          }    


        function decrypt(responseObj,key){  
            var list = []
            //get the keys from the responseObj 
            Object.keys(responseObj).forEach(function(key){
                    //Push the keys into a list
                    list.push(key);
                })
            console.log(list)

            try{
                for(var i =0;i<list.length;i++){
                    //Decrypt the values of the key
                    var decipher = crypto.createDecipher('aes256', key);
                    //Assign The decrypted value to the keys
                    responseObj[list[i]] = decipher.update(responseObj[list[i]], 'hex', 'utf8') + decipher.final('utf8')
                }
                return responseObj;

            }catch(err){
                console.log(err);
            }   
        }  


    var res = decrypt(responseObj,key)
    console.log(res)

我尝试了很多方法,我只是感到困惑,如何动态地获取键和值,而又不使用静态的键。 有任何关于请帮助的想法可以找到答案。

您已经掌握了几乎所有内容。 您知道如何从对象获取属性名称(键):

Object.keys(obj);

...以及如何遍历它们

.forEach(...)

唯一缺少的部分是递归并检测到属性的值是另一个对象。 您可以使用typeof来测试taht: typeof something === "object"告诉我们something是一个对象(或null )。

看评论:

var responseObj = {
    db_config: {
        db_user: 'das1234',
    },
    env_con: {
        db_con: 'ds67'
    },
    db_password: 'ds345ty76',
    db_host: 'wdsa12'
};

function decrypt(obj, key) {
    // Loop through this object's properties
    Object.keys(obj).forEach(function(key) {
        // Get this property's value
        var value = obj[key];
        // If not falsy (null, empty string, etc.)...
        if (value) {
            // What is it?
            switch (typeof value) {
                case "object":
                    // It's an object, recurse
                    decrypt(value, key);
                    break;
                case "string":
                    // It's a string, decrypt
                    var decipher = crypto.createDecipher('aes256', key);
                    obj[key] = decipher.update(value, 'hex', 'utf8') + decipher.final('utf8');
                    break;
            }
        }
    })
}

var res = decrypt(responseObj, key);
console.log(res);

首先让我们澄清一下什么是JSON。 JSON是一种文本形式的,不依赖语言的数据交换格式,非常类似于XML,CSV或YAML。

来源: JSON和对象文字表示法有什么区别?

那只蜜蜂说你的问题是关于迭代对象本身而不需要键。 您正在寻找这个:

for (variable in object) {... }

这是来自MDN的示例:

let obj = {a:1, b:2, c:3};

for (let prop in obj) {
  console.log("o." + prop + " = " + obj[prop]);
}

来源: https : //developer.mozilla.org/de/docs/Web/JavaScript/Reference/Statements/for...in


边注

我不知道您想使用JSON结构实现什么,但是您可以从中更改JSON:

var responseObj ={ 
           db_config:{
             db_user: 'das1234',
            },
           env_con:{
             db_con:'ds67'
           },
           db_password: 'ds345ty76',
           db_host: 'wdsa12'
          }   

对此:

let responseObj = { 
           db_user: 'das1234',
           db_con:'ds67',
           db_password: 'ds345ty76',
           db_host: 'wdsa12',
           }

新的JSON将是扁平的,您不必担心通过嵌套对象进行迭代。

例:

for (let prop in responseObj ) {
  console.log("o." + prop + " = " + responseObj [prop]);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM