如何修改Google Script修复JSON字段提取的TypeError问题
问题分析与修复方案
错误根源
你遇到的TypeError: Cannot read properties of undefined (reading 'quantity'),本质是假设payments数组和itemsInCart数组按索引一一对应,但实际二者长度不匹配或无索引关联关系,导致itemsInCart[i]返回undefined,无法读取quantity属性。
原脚本逻辑仅适用于第一个API中cannabinoidInformation和weightTierInformation严格按索引配对的场景,但订单API里的支付记录与商品项并非这种对应关系。
修复后的脚本方案
方案1:整单支付与商品项关联(符合常规订单业务逻辑)
如果订单的支付记录是针对整单的,需要将每条支付记录与该订单下所有商品项组合,使用双层flatMap实现:
var values = json.orders.flatMap(({ name, payments, itemsInCart }) => // 遍历每条支付记录,再遍历所有商品项,生成支付-商品关联数据 payments.flatMap(({ amount, paymentType }) => itemsInCart.map(({ quantity, sku }) => [name, amount, paymentType, quantity, sku]) ) );
方案2:保留索引关联+空值容错(仅当确认二者有索引对应时使用)
如果业务上确实需要按索引关联,但要避免因数组长度不匹配报错,增加空值兜底逻辑:
var values = json.orders.flatMap(({ name, payments, itemsInCart }) => payments.map(({ amount, paymentType }, i) => { // 若对应索引无商品项,用空对象兜底 const targetItem = itemsInCart[i] || {}; // 给缺失字段设置默认空值,避免报错 return [ name, amount, paymentType, targetItem.quantity ?? '', targetItem.sku ?? '' ]; }) );
额外说明
如果API响应中支付记录与商品项存在明确的业务关联字段(比如支付记录里的itemId),请优先使用该字段进行匹配,而非索引,这样数据准确性更高。
内容的提问来源于stack exchange,提问作者Kal El
相关产品推荐
相关产品推荐

