JS循环操作JSON数组出现嵌套异常 如何实现标准对象数组结构
问题根因
异常嵌套的核心原因是:request.body.id为上一次返回的完整JSON数组字符串,JSON.parse后得到的是数组类型,你直接使用push方法将整个数组作为单个元素塞入新数组,每执行一次操作就会多一层嵌套:
- 第一次操作:空数组push新对象,返回
[{"a":1,"b":1,"c":1}] - 第二次操作:解析旧返回值得到数组,直接push进空数组后生成
[[{"a":1,"b":1,"c":1}]],再添加新对象后返回两层嵌套结构 - 多次操作后嵌套层级持续叠加,和你遇到的异常结构完全匹配。
修正方案
根据场景可选择以下两种方案:
方案1:合并旧数组所有元素
将解析得到的旧数组的元素批量加入新数组,而非直接push整个数组,示例逻辑:
// 解析旧数据 const oldList = JSON.parse(request.body.id) // 初始化新数组 const newList = [] // 批量添加旧数组所有元素 newList.push(...oldList) // 添加新构造的对象 const data = {a: input1, b: input2, c: input3} newList.push(data) // 返回序列化结果 return JSON.stringify(newList)
也可以用concat方法直接合并:const newList = oldList.concat([data])
方案2:兼容单对象传参场景
如果预期request.body.id解析后为单个对象,仅当前端错误传回完整数组时才出现异常,可以增加类型校验兼容:
const parsedData = JSON.parse(request.body.id) const newList = [] // 根据解析结果类型处理 if (Array.isArray(parsedData)) { newList.push(...parsedData) } else { newList.push(parsedData) } // 添加新对象 const data = {a: input1, b: input2, c: input3} newList.push(data) return JSON.stringify(newList)
内容的提问来源于stack exchange,提问作者Thorben C.
相关产品推荐
相关产品推荐

