2017-03-16 52 views
-1

我有一个JSON对象有三个级别嵌套的我不得不遍历它动态如何在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) 

试过很多方法,我只是困惑如何拿到钥匙和值动态迭代而不使用静态密钥。 有任何想法请帮助找出答案。

+0

* “我怎么通过的Json的NodeJS嵌套循环特性?” *你不知道。 JSON是用于数据交换的*文本符号*(http://stackoverflow.com/a/2904181/157247)如果您正在处理JavaScript源代码,并且不处理*字符串*,那么您并未处理与JSON。 [(更多。)]当你解析*时,你可以遍历你所得到的对象树的嵌套属性,但是,在这一点上,你不再处理JSON。但是问题中根本没有JSON,所以不需要解析。 –

+0

您已经获取了键并使用它们查找对象上的属性。你卡在哪里?您似乎有以上的基本工作。 –

+0

克罗德你试图获得JSON的解决方案,这种形式的时候是对的,我能 这里是JSON的 让responseObj = { DB_USER: 'das1234', db_con: 'DS67', DB_PASSWORD: 'ds345ty76' , db_host:'wdsa12', } 但是,如果Json是嵌套的我可以如何继续下去? – Ramyachinna

回答

1

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

来源:What is the difference between JSON and Object Literal Notation?

这beeing说你的问题是关于迭代对象本身没有要求的关键。您正在寻找这样的:

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结构来实现,但你是c乌尔德您的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]); 
} 
+0

,谢谢但我必须迭代我提到的Json,因为我仅以这种形式得到响应。我尝试使用它迭代以解密json值。 – Ramyachinna

+0

你可以在循环内进行另一个内部检查,如:if(typeof responseObj [prop] ==='object''(typeofof要小心)然后做另一个for(对象中的变量){...} (递归),然后返回你想要的值,另外一个选择是在迭代之前将给定的JSON平坦化,在这里有许多选项。 – Megajin

1

你已经拥有几乎所有的作品。你知道如何从对象获得的属性名称(键):

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);