如何将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
相关产品推荐
相关产品推荐

