2013-07-22 3 views
0

내가 가지고 JSON을 사용하여 JSON을 읽어 쉼표를 구분 값을 만드는 방법 :다음과 같이 노드 JS

{ 
    "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(",")); 
} 
+0

루프의 각 행 다음에 console.log arr [index]를 사용할 수 있습니다. 언뜻 워크로드가 json 객체가 아니라 문자열 자체를 제외하고는 언뜻보기에는 틀린 것처럼 보입니다. –

+0

위에 나열된 JSON을 워크로드에 직접 할당하면 예상대로 작동합니다. 과제에 오류가있는 것 같습니다. workload = req.body 대신 작업 부하에 응답을 할당하십시오. – dc5

답변

1

요소는 배열입니다. 배열에/in을 사용하지 마십시오. 대신 루프에 대한 표준을 사용

for(var i = 0; i < workload.elements.length; ++i) { 
    arr.push(workload.elements[i].uri); 
} 
console.log(arr.join(',')); 
0

노드 당신이 forEach 방법 대신 for 루프 또는 for/in (cause problems 수있는 잠재력을 가지고있는 후자)를 사용하게됩니다. new Array()을 피하는 것이 another Crockford-ism이지만, [] 표기법을 좀 더 간결하고 읽기 쉽도록 작성했습니다.

var workload = req.body; 

var arr = []; 

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

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

옆 nitpicks의 이러한 종류, DC5처럼 그냥 JSON의 변수를 정의하는 시도하고 코드는 내가 (쉼표로 합류 배열 요소를 반환) 무엇을 기대했다. 경로를 호출하기 위해 당신은 무엇을 사용하고 있으며, 표시된 JSON을 어떻게 전달하고 있습니까?

편집 : bodyParser()를 사용하지 않을 경우

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 

를 사용하여 나를 위해 실패합니다. 내 코드에 app.use(express.bodyParser());을 사용하면 예상대로 작동합니다.