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

ノードでは、ループまたは(後者は問題を引き起こすforEach可能性があります)の代わりにメソッドを使用できます。回避は別のクロックフォード主義ですが、表記法の方が簡潔で読みやすいと思います。forfor/innew Array()[]

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 に答える