某个json节点之后的js循环

时间:2016-04-27 14:51:08

标签: javascript json

我正在尝试在找到特定的json节点后遍历一些json节点。

所以,这是INPUT:

{
"search": {
    "result": {
        "DN": {
            "$": "A,B,C"
        },
        "attribute-value": [
            {
                "@name": "name",
                "$": "nameHere"
            },
            {
                "@name": "account",
                "$": "accountNameHere"
            },
            {
                "@name": "role",
                "$": "roleA"
            },
            {
                "@name": "role",
                "$": "roleB"
            }
        ]
    }
}}

正如您所看到的,在上面的json有效负载的末尾有两个角色。 所以,我使用以下逻辑来达到@name =角色:

var attributeValue = node['search'].result['attribute-value'];
for (var i = 0; i < attributeValue.length; i++) {
    if (attributeValue[i]['@name'] === 'role') {
        var vRole = attributeValue[i].$;

        //The newJson.roles.role is to assign it to the new payload below
        newJson.roles.role = vRole;
    }
}

一旦到达那里,我想同时选择roleA和roleB并将其输出到以下newJson有效载荷中:

var newJson = {
    "newJson": {
        "roles": [{
            "role": {}
        }, {
            "role": {}
        }],
    }
}

目标是能够获取所有INPUT角色节点并将其输出到newJson有效负载中,但是当我在获得@name =角色后尝试发出for循环时,它会失败。

任何建议都表示赞赏。 谢谢。

4 个答案:

答案 0 :(得分:2)

我认为你应该在roles数组中添加一个新对象,就像你在for循环中一样:

var attributeValue = node['search'].result['attribute-value'];
for (var i = 0; i < attributeValue.length; i++) {
    if (attributeValue[i]['@name'] === 'role') {
        var vRole = attributeValue[i].$;

        newJson.roles.push({
            role: vRole
        });
    }
}

希望这可以提供帮助

答案 1 :(得分:0)

您可以使用filtermap数组方法。

newJson.roles = attributeValue
  .filter(function(x){return x['@name']==='role'})
  .map(function(x){return {'role': x['$']}})

答案 2 :(得分:0)

试试这个:

var attributeValue = node['search'].result['attribute-value'];
var newJson = {roles:[]};
attributeValue.forEach(function(item){
  if(item["@name"]==="role"){
    newJson.roles.push({role:item["$"]})
  }
});
console.log(JSON.stringify(newJson));

答案 3 :(得分:0)

谢谢大家 - 你真棒! 这对我有用:

JSBIN

var d = {
"search": {
    "result": {
        "DN": {
            "$": "A,B,C"
        },
        "attribute-value": [
            {
                "@name": "name",
                "$": "nameHere"
            },
            {
                "@name": "account",
                "$": "accountNameHere"
            },
            {
                "@name": "role",
                "$": "roleA"
            },
            {
                "@name": "role",
                "$": "roleB"
            }
        ]
    }
}};

var newJson = {
    "newJson": {
        "roles": []
    }
};


var attributeValue = d.search.result['attribute-value'];

for (var i = 0; i < attributeValue.length; i++) {
    if (attributeValue[i]['@name'] === 'role') {
        var vRole = attributeValue[i].$;

        newJson.newJson.roles.push({"role": vRole});
    }
}

console.log(newJson);
最后的结果是〜p ~~~~~~~~~~~~~~
[object Object] {
  newJson: [object Object] {
    roles: [[object Object] {
  role: "roleA"
}, [object Object] {
  role: "roleB"
}]
  }
}