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

