Javascript 如何迭代NodeJSON中的嵌套属性?
我有一个三层嵌套的json对象,我必须动态地迭代它 这是我的密码Javascript 如何迭代NodeJSON中的嵌套属性?,javascript,json,node.js,loops,iteration,Javascript,Json,Node.js,Loops,Iteration,我有一个三层嵌套的json对象,我必须动态地迭代它 这是我的密码 var responseObj ={ db_config:{ db_user: 'das1234', }, env_con:{ db_con:'ds67' }, db_password: 'ds345ty76', db_host: 'wdsa12
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)
var responseObj={
数据库配置:{
db_用户:“das1234”,
},
环境委员会:{
db_con:‘ds67’
},
db_密码:“ds345ty76”,
db_主机:“wdsa12”
}
函数解密(responseObj,key){
变量列表=[]
//从responseObj那里拿到钥匙
Object.key(responseObj).forEach(函数(key){
//将按键按入列表
列表。按(键);
})
console.log(列表)
试一试{
对于(var i=0;i
让我们首先阐明JSON实际上是什么。JSON是一种文本,
与语言无关的数据交换格式,很像XML、CSV或YAML
资料来源:
Being说你的问题是在不调用键的情况下迭代对象本身。你正在寻找这个:
for (variable in object) {... }
以下是MDN的一个示例:
let obj = {a:1, b:2, c:3};
for (let prop in obj) {
console.log("o." + prop + " = " + obj[prop]);
}
资料来源:
旁注
我不知道您想用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]);
}
您已经拥有了几乎所有的部分。您知道如何从对象获取属性名称(键):
Object.keys(obj);
…以及如何循环通过它们
.forEach(...)
唯一缺少的部分是递归和检测属性值是另一个对象。您可以使用typeof
: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);
“如何在nodejs中迭代Json的嵌套属性?”您不知道。Json是用于数据交换的文本符号。()如果您处理的是JavaScript源代码,而不是字符串,那么您就没有处理Json。[(更多]]不过,在解析对象树时,您可以循环遍历所得到的对象树的嵌套属性,此时您不再处理JSON。但问题中根本没有JSON,因此不需要解析。您已经获得了键并使用它们查找对象的属性。您卡在哪里了?您似乎有基本的Crowder您在尝试以这种形式获取json的解决方案时是对的,我可以在这里看到json let responseObj={db_user:'das1234',db_con:'ds67',db_password:'ds345ty76',db_host:'wdsa12',}但是如果Json是嵌套的,我如何继续呢?再说一遍:那不是Json。那只是一个JavaScript对象初始值设定项。谢谢,但我必须迭代我提到的Json,因为我只得到了这种形式的响应。我试图用它来迭代解密Json值。你可以在循环中做另一个内部检查,比如:If(typeof responseObj[prop]=='object'
(小心typeof)。然后对(object中的变量){…}
(递归)执行另一个。然后返回所需的值。另一个选项是在迭代给定JSON之前展平它。这里有几个选项。