如何在nodejs中迭代Json的嵌套属性?

时间:2017-03-16 06:46:56

标签: javascript json node.js loops iteration

我有一个具有三级嵌套的json对象,我必须动态地迭代它

这是我的代码

GetAirMsg.get({mDate: $filter('date')($scope.realdateFrom,'ddMMyy'),
        mDateO: $filter('date')($scope.realdateFrom,'yyyyMMdd'),
        mDateD: $filter('date')($scope.realdateFrom,'dd-MMM-yyyy'),
        acode: $filter('uppercase')($scope.air),
        offset: offsetInt}).$promise
    .then(function(result){
        /* result evaluation */    
    })
    .catch(function() {
        console.log("error!");
    });

尝试了很多方法我只是混淆如何动态迭代键和值而不使用键作为静态。 有任何想法有助于找到它。

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

  

让我们首先澄清一下JSON究竟是什么。 JSON是一个文本,   语言独立的数据交换格式,非常类似于XML,CSV或YAML。

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

那个说你的问题是关于迭代Object本身而不需要密钥。您正在寻找:

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