You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API返回JSON的item类型不一致,如何统一转为数组处理?

问题描述

API返回的JSON存在类型不一致问题:

  • 当item包含多条记录时,它是数组类型:
data = `{"serialNo": "1","items":{"item":[{"RECORDNO": "2", "amount": 40},{"RECORDNO": "3","amount": 40}]}}`
  • 当item只有一条记录时,它是对象类型:
data = `{"serialNo": "2","items":{"item":{"RECORDNO": "4841","amount": 40}}}`

现有处理代码在多记录场景下正常,但单记录时会因item不是数组而执行失败:

const vals = [data.items.item][0];
vals.forEach(val => {
  // do something
});

请问最简单的将item提取为数组以便后续处理的方法是什么?


解决方法

以下是几种简洁高效的处理方式,能统一把item转为数组:

方法1:类型判断后统一格式

先检查item是否为数组,非数组则包装成数组:

const item = data.items.item;
const vals = Array.isArray(item) ? item : [item];
vals.forEach(val => {
  // 执行你的逻辑
});

方法2:利用Array.concat的特性(最简洁)

Array.concat()方法既可以接收数组,也可以接收单个值,会自动把单个值转为数组元素:

const vals = [].concat(data.items.item);
vals.forEach(val => {
  // 执行你的逻辑
});

不管item是数组还是单个对象,这个方法都会返回一个标准数组,代码量最少。

方法3:兼容item不存在的场景

如果API可能返回items或item不存在的情况,可以结合可选链和空值合并运算符,避免报错:

const vals = [].concat(data.items?.item ?? []);
vals.forEach(val => {
  // 执行你的逻辑
});

这样即使items或item不存在,也能得到一个空数组,保证后续forEach能正常执行。


内容的提问来源于stack exchange,提问作者Valkyrie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 21:21:36