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

如何将axios返回的单个JSON对象转换为指定结构的JSON数组

解决方案

直接使用JavaScript原生Object.entries()方法即可完成对象到目标数组的转换,注意你给出的预期结果中有2项label为自定义修正值,与接口原始返回内容不一致,需要单独做映射覆盖;如果要求数组顺序和示例完全一致,额外加一层排序逻辑即可。


完整实现代码

// axios接口返回的原始响应数据
const discountTypeMap = {
  "GROUP": "Group",
  "NTH_PRODUCT_AFTER_M": "Nth Product After M",
  "CART_DISCOUNT": "Cart Discount",
  "EACH_NTH": "Each Nth",
  "BUYX_GETY": "Buy X Get Y",
  "PRODUCT_SET": "Product set",
  "PRODUCT_DISCOUNT": "Product Discount",
  "GET_Y_EACH_SPENT_X": "Get y Each Spent X"
}

// 自定义label覆盖配置:接口返回值和预期label不一致的项统一在这里配置
const customLabelMap = {
  PRODUCT_SET: "Discount on a Product Set",
  GET_Y_EACH_SPENT_X: "Get Y for Each Spend of X"
}

// 核心转换逻辑
const convertedResult = Object.entries(discountTypeMap).map(([configKey, defaultLabel]) => ({
  value: configKey,
  label: customLabelMap[configKey] ?? defaultLabel
}))

// 若需要和示例顺序完全一致,添加以下排序逻辑,按预期顺序排列key即可
const targetOrder = ["EACH_NTH", "GROUP", "BUYX_GETY", "CART_DISCOUNT", "NTH_PRODUCT_AFTER_M", "PRODUCT_DISCOUNT", "GET_Y_EACH_SPENT_X", "PRODUCT_SET"]
convertedResult.sort((prev, next) => targetOrder.indexOf(prev.value) - targetOrder.indexOf(next.value))

输出结果

运行后convertedResult的内容完全匹配预期格式:

[
  { value: "EACH_NTH", label: "Each Nth" },
  { value: "GROUP", label: "Group" },
  { value: "BUYX_GETY", label: "Buy X Get Y" },
  { value: "CART_DISCOUNT", label: "Cart Discount" },
  { value: "NTH_PRODUCT_AFTER_M", label: "Nth Product After M" },
  { value: "PRODUCT_DISCOUNT", label: "Product Discount" },
  { value: "GET_Y_EACH_SPENT_X", label: "Get Y for Each Spend of X" },
  { value: "PRODUCT_SET", label: "Discount on a Product Set" }
]

注意事项

  • 该实现无需引入任何第三方工具库,所有现代浏览器、Node.js环境均原生支持
  • 如果不需要固定数组顺序,可以直接移除最后的排序代码,转换逻辑本身不受影响
  • 后续如果有其他需要修正label的场景,直接在customLabelMap中添加对应键值对即可,不需要修改核心转换逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 03:12:19