NodeJS获取请求。无法访问JSON元素

时间:2014-02-20 05:16:29

标签: json node.js get

我在NodeJS的get请求中有以下代码

response.on('data', function (chunk) {
    console.log(chunk);
    JSON.parse(chunk);
    console.log("ch"+chunk.product.productId);
    responseData+=chunk;
});

第一个console.log打印整个响应,它是一个字符串形式的JSON:

{"product":[{"defaultProductUrl":"http:\/\/www.zappos.com\/product\/7306789","defaultImageUrl":"http:\/\/www.zappos.com\/images\/z\/2\/1\/3\/2\/5\/4\/2132548-p-DETAILED.jpg","productId":"7306789","productName":"Pro Short","brandId":"1630","brandName":"CW-X"}],"statusCode":"200"}

然而第二个引发错误:

console.log("ch"+chunk.product.productId);

TypeError: Cannot read property 'productId' of undefined
    at IncomingMessage.<anonymous> (c:\Users\Udai\Desktop\Zappos\server.js:78:38)
    at IncomingMessage.EventEmitter.emit (events.js:95:17)
    at IncomingMessage.<anonymous> (_stream_readable.js:746:14)
    at IncomingMessage.EventEmitter.emit (events.js:92:17)
    at emitReadable_ (_stream_readable.js:408:10)
    at emitReadable (_stream_readable.js:404:5)
    at readableAddChunk (_stream_readable.js:165:9)
    at IncomingMessage.Readable.push (_stream_readable.js:127:10)
    at HTTPParser.parserOnBody [as onBody] (http.js:141:22)
    at Socket.socketOnData [as ondata] (http.js:1584:20)

有关正在发生的事情的任何想法?

2 个答案:

答案 0 :(得分:2)

您需要累积所有数据,然后才能对其运行JSON.parse。也就是说,继续在responseData += chunk然后运行JSON.parse中累积块。否则,您可以在以下字符串上运行JSON.parse{"prop":,然后是另一个块:"value"}。这些都不是有效的JSON:

response.on("end", function () {
    console.log(JSON.parse(responseData));
});

答案 1 :(得分:1)

可读流中可能存在chunk 'data'var body = ''; response.on('data', function (chunk) { body += chunk.toString(); }); response.on('end', function () { // ... }); 。您需要确保拥有所有这些内容(即使只有1个)并在'end'进行处理后进行处理。

JSON.parse()

您还需要存储var data = JSON.parse(body); 的结果,因为它不会改变其参数。

[...]

然后,根据JSON中的data.productArray将成为Object的{​​{1}}。因此,您必须访问它的索引才能检索productId

console.log(data.product[0].productId);