nodejs 判断 数组为空的 json数据时,一直报错undefined
发布于 2 个月前 作者 seanzxc 557 次浏览 来自 问答

对不起各位大神,请不要恨铁不成钢,我真心不懂这个简单的初级问题。 我自己在做一个API小程序,用nodejs的request包抓取了许多json数据。 问题简单的来说就是,我需要判断一个有时候有数值,有时候却为空的属性,属性名为deliverTime, 当deliverTime存在的时候,抓取这个json属性,当deliverTime不存在的时候,不抓取。 然而,如果我的判断语句为: if(body.data.deliverBills[0].deliverTime){console.log(body.data.deliverBills[0].deliverTime;}else{console.log(“不存在deliverTime”);} 如果deliverTime存在还好,会正常运行。 但一旦不存在的时候,似乎轮不到这个判断函数运行,就会因为deliverTime不存在直接先报错,报错内容为: TypeError: Cannot read property ‘deliverTime’ of undefined at Request._callback (c:\node\syncec9.js:126:34) at Request.self.callback (c:\node\node_modules\request\request.js:199:22) at emitTwo (events.js:87:13) at Request.emit (events.js:172:7) at Request.<anonymous> (c:\node\node_modules\request\request.js:1036:10) at emitOne (events.js:82:20) at Request.emit (events.js:169:7) at IncomingMessage.<anonymous> (c:\node\node_modules\request\request.js:963:

  1. at emitNone (events.js:72:20) at IncomingMessage.emit (events.js:166:7)

    求大神们开导调教

5 回复

以下为我根据API调取单号后获取数据的结果,--以后的日期就是我需要的数据,--之前的DH就是订单号,第一个200只是表示数据取到了,每个SyncDT200只是表明局部订单数据整体获取顺利。 c:\node>node syncec9.js 200 DH-O-20160222-006573 -- 2016-02-22 00:00:00 SyncDT200 DH-O-20160222-007869 -- 2016-02-22 00:00:00 SyncDT200 DH-O-20160222-011005 -- [TypeError: Cannot read property ‘deliverTime’ of undefined] SyncDT200 DH-O-20160222-006573 -- 2016-02-22 00:00:00 SyncDT200 DH-O-20160222-007869 -- 2016-02-22 00:00:00 SyncDT200 DH-O-20160222-006573 -- 2016-02-22 00:00:00 SyncDT200 DH-O-20160222-006573 -- 2016-02-22 00:00:00 SyncDT200 DH-O-20160222-007869 -- 2016-02-22 00:00:00 SyncDT200 DH-O-20160222-011005 -- [TypeError: Cannot read property ‘deliverTime’ of undefined] SyncDT200 DH-O-20160222-010426 -- 2016-02-22 00:00:00 SyncDT200

deliverBills[0] 是undefined,当然会报错,你得先判断deliverBills[0],而不是deliverTime。

同2楼,你得先学习英语,那提示已经很明显了。

同意楼上,对象是一级级判断的,如果跟对象就为空,你要查询里面的属性就一定是读取错误。就好比你要去A超市买指定B产品,A超市都没找到,B产品一定是没有啦。 自豪地采用 CNodeJS ionic

谢谢各位大神,问题解决了!

回到顶部