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

Golang调用Marvel API如何正确输出纯ID数字数组格式JSON

Go 对接Marvel API返回纯ID数字数组的规范实现方案

核心方案是先解析Marvel接口返回的结构化数据,提取所有ID组成纯数字切片后直接序列化,完全替代不规范的字符串替换操作,具体实现如下:

步骤1:定义结构体匹配Marvel返回结构

// MarvelCharacter 对应Marvel返回的单个角色字段,仅需声明需要的ID字段即可
type MarvelCharacter struct {
    ID int64 `json:"id"`
}

// MarvelResponse 匹配Marvel /v1/public/characters 接口的外层响应结构
type MarvelResponse struct {
    Data struct {
        Results []MarvelCharacter `json:"results"`
    } `json:"data"`
}

步骤2:解析响应提取ID切片

// respBody 为请求Marvel接口得到的原始响应字节流
var marvelResp MarvelResponse
if err := json.Unmarshal(respBody, &marvelResp); err != nil {
    // 自行处理解析错误逻辑
    return
}

// 遍历提取所有角色ID,组成纯数字切片
charIDs := make([]int64, 0, len(marvelResp.Data.Results))
for _, item := range marvelResp.Data.Results {
    charIDs = append(charIDs, item.ID)
}

步骤3:序列化得到目标格式JSON

直接序列化charIDs切片,输出的就是你需要的[1011234, 1012345...]格式的纯数字数组JSON:

result, err := json.Marshal(charIDs)
if err != nil {
    // 自行处理序列化错误逻辑
    return
}

如果使用Gin、Echo等Web框架,可直接将charIDs作为返回值交给框架序列化:

// Gin框架示例
c.JSON(200, charIDs)

可选复用方案

如果多处需要用到这个转换逻辑,可以给角色切片自定义JSON序列化方法,后续直接序列化该类型变量即可自动输出ID数组:

type CharacterList []MarvelCharacter

func (cl CharacterList) MarshalJSON() ([]byte, error) {
    ids := make([]int64, 0, len(cl))
    for _, c := range cl {
        ids = append(ids, c.ID)
    }
    return json.Marshal(ids)
}

字符串替换方案的问题

  • 逻辑脆弱:如果Marvel接口返回的JSON格式、字段顺序、缩进规则变化,或者存在转义字符,替换逻辑会直接失效
  • 扩展性差:后续如果需要增加ID校验、过滤等逻辑,字符串替换方案无法灵活支持
  • 性能更低:字符串替换的内存拷贝开销远高于直接操作结构化数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 19:45:06