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

如何将API返回的字符串类型addedInvoiceProductDetails转为可map的对象

问题根因

addedInvoiceProductDetails字段是服务端提前做了JSON序列化后的字符串类型数据,你看到的[]、{}结构只是字符串的文本内容,本质不是JavaScript数组,所以无法直接调用数组的map方法。

解决方案

使用JSON.parse()方法对该字段做反序列化处理,转换为可操作的JavaScript数组即可,示例代码如下:

// 调用接口获取返回数据
const fetchInvoiceData = async () => {
  const res = await fetch('http://127.0.0.1:8000/api/invoice_details/8')
  const responseData = await res.json()
  // 反序列化商品明细字段
  const productDetails = JSON.parse(responseData.addedInvoiceProductDetails)
  // 此时可正常执行map操作
  const formattedList = productDetails.map(product => {
    return {
      商品名称: product.productname,
      购买数量: product.productquantity,
      商品单价: product.productprice,
      商品总价: product.producttotalprice
    }
  })
  console.log('处理后的商品列表', formattedList)
}

异常兼容处理

为避免字段为空、JSON格式异常导致程序报错,建议添加异常捕获逻辑:

let productDetails = []
try {
  productDetails = JSON.parse(responseData.addedInvoiceProductDetails)
  // 额外校验是否为数组,避免服务端返回非数组的JSON结构
  if (!Array.isArray(productDetails)) {
    productDetails = []
  }
} catch (e) {
  console.error('商品明细解析错误:', e)
  productDetails = []
}

可选优化(从根源解决)

如果有权限调整后端接口逻辑,建议让后端直接将addedInvoiceProductDetails字段作为JSON数组返回,不要做额外的序列化转字符串处理,前端就无需额外做解析操作。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:45:07