0

我有一个 JSON 如下:

{
    "workloadId": "68cf9344-5a3c-4e4a-927c-c1c9b6e48ccc",
    "elements": [
        {
            "name": "element1",
            "uri": "vm/hpcloud/nova/large"
        },
        {
            "name": "element2",
            "uri": "vm/hpcloud/nova/small"
        }
    ],
    "workloadStatus": "none"
}

我需要按如下方式获取逗号分隔的字符串:element1,element2

当我尝试如下给出时,我得到了空字符串:

app.post('/pricingdetails', function(req, res) {

    var workload = req.body;

    var arr = new Array();
    for(var index in workload.elements)
    {
        arr[index] = workload.elements[index].uri;
    }
    console.log(arr.join(","));
}
4

2 回答 2

1

元素是一个数组。切勿将 for/in 用于数组。改用标准 for 循环:

for(var i = 0; i < workload.elements.length; ++i) {
    arr.push(workload.elements[i].uri);
}
console.log(arr.join(','));
于 2013-07-22T18:04:58.123 回答
0

Node 将允许您使用forEach方法而不是for循环或循环for/in(后者有可能导致问题)。避免new Array()另一种 Crockford 主义,但我也只是发现该[]符号更简洁易读。

var workload = req.body;

var arr = [];

workload.elements.forEach(function(el) {
    arr.push(el.uri);
});

console.log(arr.join(','));

除了这些挑剔的东西,比如 dc5 我试着用你的 JSON 定义一个变量,你的代码做了我所期望的(返回用逗号连接的数组元素)。您使用什么来调用该路由,以及如何将指示的 JSON 传递给它?

编辑:使用

curl -v -H "Content-type: application/json" -X POST -d '{"workloadId": "68cf9344-5a3c-4e4a-927c-c1c9b6e48ccc", "elements": [{"name": "element1", "uri": "vm/hpcloud/nova/large"}, {"name": "element2", "uri": "vm/hpcloud/nova/small"} ], "workloadStatus": "none"}'  http://localhost:3000/pricingdetails

如果不使用bodyParser()对我来说失败。在app.use(express.bodyParser());我的代码中,它按预期工作。

于 2013-07-23T13:11:29.620 回答