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

Golang实现外部API响应转自有API格式的字段映射问题

解决方案

直接在遍历逻辑里补全跨结构体的字段显式赋值即可,不需要额外引入复杂的映射库。

核心转换逻辑实现

你定义的Brawler结构体里,ID字段已经映射了第三方返回的id值,Username字段已经映射了第三方返回的Name值,遍历的时候直接把这两个字段对应赋值给Champion的同语义字段就行,补全后的sortBrawler函数代码如下:

func sortBrawler(brawlers []Brawler) []Champion {
    // 预分配切片容量,减少append操作的内存扩容开销
    champions := make([]Champion, 0, len(brawlers))
    for _, brawler := range brawlers {
        champions = append(champions, Champion{
            Id:       brawler.ID,
            NickName: brawler.Username,
        })
    }
    return champions
}

现有代码的额外修正点

你当前的接口处理逻辑还有两个容易踩的问题,一并修正即可:

  • json.Unmarshal调用没有处理错误返回,一旦第三方返回格式异常、反序列化失败,后续逻辑会拿到空数据运行,需要加错误判断
  • 接口最后写响应时,json.NewEncoder编码的是原始第三方结构items,不是你转换完成的champions,等于做了无用功,需要替换编码对象
    修正后的接口核心段代码:
// 反序列化响应到结构体
err = json.Unmarshal(resp.Body(), &items)
if err != nil {
    http.Error(w, "数据源解析失败", http.StatusInternalServerError)
    return
}

// 转换数据格式
champions := sortBrawler(items.Items)

w.Header().Set("Content-Type", "application/json")
// 返回转换后的自有结构数据
json.NewEncoder(w).Encode(champions)

如果后续你需要在自有接口返回starPowers、gadgets这类嵌套字段,只需要给Champion结构体增加对应属性,再补全嵌套结构体的字段映射逻辑即可,当前需求只映射id和昵称的话不需要处理这些冗余字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 20:36:24