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

Golang如何将JSON字符串数组反序列化为[]int64类型?

如何在Go中将JSON字符串数组编/解码为[]int64类型字段?

确实,Go标准库的encoding/json包提供的,string结构体标签用起来很顺手,能把像"309230"这样的字符串数字直接转成int64类型字段,比如:

type Demo struct {
    SingleInt int64 `json:",string"`
}

但遗憾的是这个标签只支持单个值的类型(字符串、浮点数、整数、布尔),对[]int64这种切片类型完全不起作用。要实现JSON字符串数组和[]int64的互转,最靠谱的方式是自定义类型并实现JSON编解码接口。

具体实现步骤

首先,我们定义一个基于[]int64的自定义类型:

type Int64Slice []int64

然后给这个类型实现json.Unmarshaler接口,处理从JSON字符串数组到Int64Slice的解码:

import (
    "encoding/json"
    "strconv"
)

func (s *Int64Slice) UnmarshalJSON(data []byte) error {
    // 先把JSON数据解析成字符串切片
    var strSlice []string
    if err := json.Unmarshal(data, &strSlice); err != nil {
        return err
    }

    // 遍历字符串切片,逐个转成int64
    converted := make([]int64, len(strSlice))
    for idx, str := range strSlice {
        num, err := strconv.ParseInt(str, 10, 64)
        if err != nil {
            return err
        }
        converted[idx] = num
    }

    *s = converted
    return nil
}

如果需要把Int64Slice编码回JSON字符串数组,再实现json.Marshaler接口:

func (s Int64Slice) MarshalJSON() ([]byte, error) {
    // 把每个int64转成字符串
    strSlice := make([]string, len(s))
    for idx, num := range s {
        strSlice[idx] = strconv.FormatInt(num, 10)
    }

    // 将字符串切片编码为JSON
    return json.Marshal(strSlice)
}

使用示例

现在你可以在结构体里直接用这个自定义类型了:

type MyData struct {
    Scores Int64Slice `json:"scores"`
}

// 解码测试
jsonInput := `{"scores": ["95", "88", "76"]}`
var data MyData
if err := json.Unmarshal([]byte(jsonInput), &data); err != nil {
    panic(err)
}
// 输出: [95 88 76]
fmt.Println(data.Scores)

// 编码测试
data.Scores = Int64Slice{90, 85, 92}
jsonOutput, err := json.Marshal(data)
if err != nil {
    panic(err)
}
// 输出: {"scores":["90","85","92"]}
fmt.Println(string(jsonOutput))

补充说明

根据Go官方文档的描述:

"string"选项表示字段存储在JSON编码的字符串内。它只适用于字符串、浮点数、整数或布尔类型的字段。

这也解释了为什么,string标签对切片无效——它本来就没设计支持复合类型。而自定义编解码接口的方式完全不受这个限制,还能灵活处理各种边缘情况(比如非法数字字符串的错误处理)。

内容的提问来源于stack exchange,提问作者Vojtech Vitek - golang.cz

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:47:55