首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NodeJS收到请求。无法访问JSON元素

NodeJS收到请求。无法访问JSON元素
EN

Stack Overflow用户
提问于 2014-02-20 05:16:28
回答 2查看 1.7K关注 0票数 1

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

代码语言:javascript
复制
response.on('data', function (chunk) {
    console.log(chunk);
    JSON.parse(chunk);
    console.log("ch"+chunk.product.productId);
    responseData+=chunk;
});

第一个console.log输出整个响应,这是一个字符串形式的JSON:

代码语言:javascript
复制
{"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"}

然而,第二个错误引发了一个错误:

代码语言:javascript
复制
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)

对发生了什么有什么想法吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-20 05:23:28

在一个可读的流中,可以并且经常存在不止一个chunk of 'data'。您需要确保拥有所有这些数据(即使只有1),并在到达'end'后执行处理。

代码语言:javascript
复制
var body = '';

response.on('data', function (chunk) {
    body += chunk.toString();
});

response.on('end', function () {
    // ...
});

您还需要存储JSON.parse()的结果,因为它不会更改其参数。

代码语言:javascript
复制
var data = JSON.parse(body);

然后,从JSON中的[...]中,data.product将是ObjectArray,因此,您必须访问它的索引才能检索productId

代码语言:javascript
复制
console.log(data.product[0].productId);
票数 2
EN

Stack Overflow用户

发布于 2014-02-20 05:22:31

在运行JSON.parse之前,您需要积累所有的数据。也就是说,继续在responseData += chunk中积累块,然后运行JSON.parse。否则,您可以在一个字符串上运行JSON.parse,比如:{"prop":,后面跟着另一个块:"value"}。这两个都不是有效的JSON:

代码语言:javascript
复制
response.on("end", function () {
    console.log(JSON.parse(responseData));
});
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21898764

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档