我在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)
有关正在发生的事情的任何想法?
答案 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.product
,Array
将成为Object
的{{1}}。因此,您必须访问它的索引才能检索productId
。
console.log(data.product[0].productId);